gpt4 book ai didi

java - 如何获取与使用 JPA 映射的其他实体具有多对多关系的实体成员列表?

转载 作者:行者123 更新时间:2023-11-30 21:48:47 25 4
gpt4 key购买 nike

我在数据库中有表 AuthorsBooks(具有连接表 Authorsbooks)。我使用 MySQL 创建并启动了表。我还在一个实体中使用 @manyToMany@Jointable 与两个实体 Authors 和 Books 进行了(标准)JPA 映射,并且 mappedBy 在另一个并将其连接到数据库。

当我尝试使用 Java 方法 findAll() 获取 Authors 实体的所有成员时,它返回一个无穷无尽的序列:就像作者的第一个成员和书籍列表,其中第一本 Book 包含 Authors 列表,其中包含第一本书,其中包含作者列表等等,无穷无尽。如何只获得没有字段 listOfBooks 的作者(就像我在数据库表中有它一样)?

@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

公共(public)课书{

@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")公共(public)类 AuthorResource {

@Autowired
AuthorsRepository authorsRepository;

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

CREATE TABLE author

( authorid INT AUTO_INCREMENT 主键, 作者姓名 VARCHAR(255) NOT NULL);

创建表书( bookid INT AUTO_INCREMENT 主键, 书名 VARCHAR(255) NOT NULL);

创建表 author2books( 授权 INT, bookid 整数,

主键(authorid,bookid), 外键 (authorid) 引用作者 (authorid), 外键 (bookid) 引用书籍 (bookid));

-- 创建作者值INSERT INTO Author VALUES (authorid, 'Sven');INSERT INTO Author VALUES (authorid, 'Peter');

-- 创建帐簿值INSERT INTO Book VALUES (bookid, 'Biology');INSERT INTO Book VALUES (bookid, 'Chemistry');

-- 创建 author2books 值

INSERT INTO author2books VALUES (1, 2);

Entities mapping schema

Tables creation SQL script

Entities mapping/relationship

Database script

最佳答案

令我惊讶的是,在我看来,标准情况下很难找到解决方案。我找到了两种解决方法。第一个有点间接:在不包含 ManytoMany 列表字段的情况下进行查询返回实体,如下所述:Spring JPA selecting specific columns .第二种方法更直接但看起来很奇特:使用 JsonBackReference 和 JsonManagedReference 注释,如下所示:https://www.keenformatics.com/how-to-solve-json-infinite-recursion/

关于java - 如何获取与使用 JPA 映射的其他实体具有多对多关系的实体成员列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48231215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com