Jpa 加载关系时堆栈溢出
我有以下关系:Jpa 加载关系时堆栈溢出,jpa,eclipselink,lombok,Jpa,Eclipselink,Lombok,我有以下关系: @Data @EqualsAndHashCode(callSuper=true) public class Room extends BasePersistable { private static final long serialVersionUID = 1L; @Column(nullable=false) private String uid; @Column(nullable=false) private String na
@Data
@EqualsAndHashCode(callSuper=true)
public class Room extends BasePersistable {
private static final long serialVersionUID = 1L;
@Column(nullable=false)
private String uid;
@Column(nullable=false)
private String name;
@Column(nullable=true)
private String fullName;
@Column(nullable=true, length=500)
private String description;
@Column(nullable=true)
private String homepage;
@Column(nullable=false)
private String owner;
@ManyToOne
@JsonIgnoreProperties({"repos", "members"})
private Organization organization;
及
我不确定这个问题是否与日食或龙目巨人制造的东西有关
编辑:我注意到有时它确实有效(当我删除整个数据库时)您可以在
EqualsAndHashCode
注释中添加exclude
属性。
例如,要从您的组织实体中排除回购
集合,请使用:
@EqualsAndHashCode(callSuper = false, exclude={"repos"})
在组织类的构造函数之前
另外,如果有人正在阅读此答案,并且碰巧使用了Hibernate,我建议对您的收藏使用
Set
(而不是List
)。除了避免可怕的MultipleBagFetchException
,Set
允许您在实体中有多个急切加载的集合。它还允许您使用[left]join fetch
加载多个集合,如果您有时想使用lazy v.s.eager加载。您可以在EqualsAndHashCode
注释中添加exclude
属性。
例如,要从您的组织实体中排除回购
集合,请使用:
@EqualsAndHashCode(callSuper = false, exclude={"repos"})
在组织类的构造函数之前
另外,如果有人正在阅读此答案,并且碰巧使用了Hibernate,我建议对您的收藏使用
Set
(而不是List
)。除了避免可怕的MultipleBagFetchException
,Set
允许您在实体中有多个急切加载的集合。它还允许您使用[left]join fetch
加载多个集合,如果您有时想使用lazy v.s.eager加载。由于这是一个hashCode调用,请检查hashCode方法中的逻辑-它们看起来是递归的,或者贯穿整个对象模型。您可能不想依赖于对任何集合属性调用hashCode。我使用的是lombok,因此我并不真正负责实现。无论如何,lombok有一个选项可以从计算中排除某些字段,这就成功了!由于这是一个hashCode调用,请检查hashCode方法中的逻辑-它们似乎是递归的或贯穿整个对象模型。您可能不想依赖于对任何集合属性调用hashCode。我使用的是lombok,因此我并不真正负责实现。无论如何,lombok有一个选项可以从计算中排除某些字段,这就成功了!
@EqualsAndHashCode(callSuper = false, exclude={"repos"})