java—如何获得与jpaMap的其他实体有很多关系的实体成员列表?

0x6upsns  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(442)

我在数据库中有表authors和图书(带有连接表authorsbooks)。我用 MySQL . 我还制定了(标准) JPA 使用两个实体Map作者和书籍 @manyToMany 以及 @Jointable 在一个实体和 mappedBy 另一个连接到数据库。
当我尝试用java方法获取authors实体的所有成员时 findAll() 它返回一个无休止的序列:就像拥有图书列表的作者的第一个成员,其中第一本书包含作者列表,其中第一本书包含作者列表,依此类推,无休止。如何只获取作者而不包含图书列表字段(就像我在数据库表中有它一样)?

@Entity

公共类作者{

@Id
@GeneratedValue
@Column(name = "authorid")
private Integer authorid;

@Column(name = "authorname")
private String authorname;

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "listOfAuthors")
private List<Book> listOfBooks = new ArrayList<Book>();
//getters and setters

@Entity

公共课堂用书{

@Id
@GeneratedValue
@Column(name = "bookid")
private Integer bookid;
@Column(name = "bookname")
private String bookname;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "author2books", joinColumns = @JoinColumn(name = "bookid"),
        inverseJoinColumns = @JoinColumn(name = "authorid"))
private List<Author> listOfAuthors = new ArrayList<Author>();

//getters and setters

@RestController

@requestmapping(value=“/rest/authors”)公共类authorresource{

@Autowired
AuthorsRepository authorsRepository;

@GetMapping(value = "/all")
public List<Author> getAll() {
    return authorsRepository.findAll();
}

}

CREATE TABLE author

(authord int auto\ u increment主键,authorname varchar(255)不为空);
创建表book(bookid int auto\ u increment主键,bookname varchar(255)不为空);
创建表author2books(authorid int,bookid int,
主键(authorid,bookid),外键(authorid)引用author(authorid),外键(bookid)引用book(bookid));
--创建作者值插入作者值(authord,'sven');插入作者值(authord,'peter');
--创建帐面价值插入帐面价值(bookid,'生物学');插入帐面价值(bookid,'化学');
--创建author2books值
插入author2books值(1,2);


实体Map/关系
数据库脚本

toiithl6

toiithl61#

我感到惊讶的是,在我看来,要找到一个解决这个问题的办法并不容易。我找到了两种解决方法。第一种是有点间接的:使查询返回实体而不包括所描述的许多列表字段here:spring jpa 选择特定列。第二种方法更直接,但看起来很奇特:使用jsonbackreference和jsonmanagedreference注解,如下所示:keenformatics.blogspot.se/2013/08/

ztmd8pv5

ztmd8pv52#

您可以尝试标记关系book->author/author->book lazy loaded,以避免进入无限循环:)
@manytomany(fetch=lazy)

相关问题