【发布时间】:2018-06-22 05:00:04
【问题描述】:
我在数据库中有表 Authors 和 Books(带有连接表 Authorsbooks)。我使用MySQL 创建并启动了表。我还使用@manyToMany 和@Jointable 在另一个实体中使用mappedBy 与两个实体作者和书籍进行(标准)JPA 映射,并将其连接到数据库。
当我尝试使用 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
公开课本{
@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
( authorid INT AUTO_INCREMENT PRIMARY KEY, 作者名 VARCHAR(255) NOT NULL );
创建表书 ( bookid INT AUTO_INCREMENT 主键, 书名 VARCHAR(255) NOT NULL );
创建表 author2books ( 授权INT, bookid INT,
PRIMARY KEY (authorid, bookid), FOREIGN KEY (authorid) REFERENCES 作者 (authorid), 外键 (bookid) 参考书 (bookid) );
-- 创建作者值 插入作者值(authorid,'Sven'); 插入作者值(authorid,'Peter');
-- 创建账面价值 插入图书价值(bookid,“生物学”); INSERT INTO Book VALUES (bookid, 'Chemistry');
-- 创建 author2books 值
INSERT INTO author2books VALUES (1, 2);
【问题讨论】:
-
您可能想显示您的映射,然后我们可能会帮助您发现错误。
-
您可能在访问
Author类型的集合后触发了延迟加载 -
请不要将代码 sn-ps 发布为图像,而是发布为代码块(格式良好的文本)。
-
如果您也可以在这里发布表格架构..
-
你也可以看看这里..可能会有所帮助。 stackoverflow.com/questions/33234546/…
标签: java mysql spring spring-data-jpa