gpt4 book ai didi

java - 如何在 JPA 中拥有 2 个相同类型的集合?

转载 作者:太空狗 更新时间:2023-10-29 22:54:41 25 4
gpt4 key购买 nike

我在 JPA 中有 2 个实体:条目和评论。 Entry 包含两个 Comment 对象集合。

@Entity
public class Entry {
...

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@IndexColumn(base = 1, name = "dnr")
private List<Comment> descriptionComments = new ArrayList<Comment>();

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@IndexColumn(base = 1, name = "pmnr")
private List<Comment> postMortemComments = new ArrayList<Comment>();

...
}

为了存储此类对象,JPA+Hibernate 创建了“Entry”表、“Comment”表和单个“Entry_Comment”:

创建表 Entry_Comment(Entry_id 整数不为空,postMortemComments_id 整数不为空,pmnr 整数不为空,descriptionComments_id 整数不为空,dnr 整数不为空,主键(Entry_id,dnr),唯一(descriptionComments_id),唯一( postMortemComments_id))

对象存储失败,因为 descriptionComments_idpostMortemComments_id 不能同时为“not null”。

如何使用 JPA+Hibernate 存储包含两个相同类型集合的对象?

最佳答案

这是许多 Hibernate 错误之一(准确地说是 HHH-3410)。

我已经设法通过向 @OneToMany 关系添加 @JoinTable 注释来修复它,每个关系都有自己的表名。

在您的情况下,它看起来像这样:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="entity_descriptioncomments")
@IndexColumn(base = 1, name = "dnr")
private List<Comment> descriptionComments = new ArrayList<Comment>();

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name="entity_postmortemcomments")
@IndexColumn(base = 1, name = "pmnr")
private List<Comment> postMortemComments = new ArrayList<Comment>();

注意:您还必须添加 @IndexColumn 注释(因为多个 EAGER 包的另一个 Hibernate 问题:HHH-1718/EJB-346)。

关于java - 如何在 JPA 中拥有 2 个相同类型的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/669828/

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