当前位置: 首页 > 知识库问答 >
问题:

如何得到一个实体成员的列表,它与其他实体有很多很多的关系,用JPA映射?

鲜于勇
2023-03-14

我在数据库中有表Authors和Books(带联接表Authorsbooks)。我使用mysql创建并启动了表。我还在一个实体中使用@manytomany@jointable以及在另一个实体中使用mappedby与两个实体作者和书籍进行了(标准的)JPA映射,并将其连接到数据库。

当我尝试用Java方法findall()获取Authors实体的所有成员时,它返回一个无尽的序列:就像Authors的第一个成员具有图书列表,其中第一本书包含作者列表,而它包含的第一本书包含作者列表,依此类推,无尽。如何只获得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
@Autowired
AuthorsRepository authorsRepository;

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

创建表author2books(authorid INT、bookid INT,

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

--创建作者值,插入作者值(authorid,'sven');插入作者值(authorid,“Peter”);

共有1个答案

夏英发
2023-03-14

您可以尝试将关系标记为book->author/author->Book Lazy loaded以避免进入无限循环:)

@ManyTomany(fetch=懒惰)

 类似资料:
  • 我有三张桌子: 制作方法(id,name) 配方_frequents(id,fk_recipe,fk_frequentent,quantity) 成分(id,名称) 我需要找到所有的食谱,包含确切提供的配料ID列表。 ES: 我提供了一个像111(盐),222(胡椒),333(油)的配料id列表,我需要找到所有只有这些配料的食谱。 因此,如果一个食谱包含这些成分(我提供的id列表)+其他成分,它就

  • 问题内容: 我正在尝试使用JPA 2.0创建具有通用关系的多态实体。应该有两个表,一个事件表和一个通知表。在这些表内是彼此相关的具体实体,如下所示: 从逻辑上讲,这应该在休眠状态下是可能的,因为在SQL中是可能的: 这就是我所拥有的: 使用此代码,我可以持久保存并获取任何Event,Notification,LoginEvent或NotificationEvent,但是当我尝试在JPA 2.0元模

  • 我有一个JPA实体(人)与其他实体(地址)有多对一的关系。在一个对象可以被系统使用之前,这个对象必须得到主管的批准。我将原始实体存储为byte[]并对“工作”实体进行更改,并将其存储在数据库中。如果这些更改不被批准,我必须恢复原始状态。因此,我将存储的原始数据从byte[]中转换出来,并使用实体管理器将其合并到数据库中。所有的工作都很好,但是如果一个新的地址实体已经添加到“工作”的人,在合并还原的

  • 我有一个Post实体,它有一个TestAttribute类型属性,其代码如下: 我尝试在传递一个RawSql(其中我还获得了其他属性)之后获取属性testAttribute,如下代码所示 我的问题是,当我使用Ebean返回查询结果时。json()。tojson(),则不会返回TestAttribute属性。这是返回的结果: 注意,当我使用json时。toJson()返回结果,但返回的实体属性可以使

  • 如何为这种多对多关系分配默认值?制作两个关联表->一个用于收件箱-关系,另一个用于发件箱-关系会更好吗?我该如何做到这一点?这个问题的其他解决方案? 任何帮助都非常感谢--非常感谢!