0
時,我有如下關係:堆棧溢出加載關係
@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;
和
@Data
@EqualsAndHashCode(callSuper=true)
@JsonInclude(content=Include.NON_NULL)
public class Organization extends BasePersistable {
private static final long serialVersionUID = -7119760968529447945L;
@Column(nullable=false)
@NotEmpty
private String name;
@Column(nullable=false, unique = true)
@NotNull
private Integer uid;
@Column
private String avatar;
@Column
private String blog;
@Column
private String company;
@Column(nullable=false)
@NotNull
private String login;
@Column(nullable=true)
private String location;
@OneToMany(mappedBy="organization")
@JsonIgnoreProperties({"users", "joined", "organization"})
private List<Room> repos = new ArrayList<>();
,當我從一個特定的用戶負載的房間,我得到這個錯誤:
java.lang.StackOverflowError: null
at com.inkdrop.app.domain.models.Organization.hashCode(Organization.java:29) ~[classes/:na]
at com.inkdrop.app.domain.models.Room.hashCode(Room.java:34) ~[classes/:na]
at java.util.AbstractList.hashCode(AbstractList.java:541) ~[na:1.8.0_51]
at java.util.Vector.hashCode(Vector.java:992) ~[na:1.8.0_51]
at org.eclipse.persistence.indirection.IndirectList.hashCode(IndirectList.java:504) ~[org.eclipse.persistence.core-2.6.1.jar:na]
at com.inkdrop.app.domain.models.Organization.hashCode(Organization.java:29) ~[classes/:na]
at com.inkdrop.app.domain.models.Room.hashCode(Room.java:34) ~[classes/:na]
at java.util.AbstractList.hashCode(AbstractList.java:541) ~[na:1.8.0_51]
at java.util.Vector.hashCode(Vector.java:992) ~[na:1.8.0_51]
at org.eclipse.persistence.indirection.IndirectList.hashCode(IndirectList.java:504) ~[org.eclipse.persistence.core-2.6.1.jar:na]
at com.inkdrop.app.domain.models.Organization.hashCode(Organization.java:29) ~[classes/:na]
at com.inkdrop.app.domain.models.Room.hashCode(Room.java:34) ~[classes/:na]
at java.util.AbstractList.hashCode(AbstractList.java:541) ~[na:1.8.0_51]
at java.util.Vector.hashCode(Vector.java:992) ~[na:1.8.0_51]
at org.eclipse.persistence.indirection.IndirectList.hashCode(IndirectList.java:504) ~[org.eclipse.persistence.core-2.6.1.jar:na]
at com.inkdrop.app.domain.models.Organization.hashCode(Organization.java:29) ~[classes/:na]
at com.inkdrop.app.domain.models.Room.hashCode(Room.java:34) ~[classes/:na]
....
我不確定問題是否與Eclipselink或Lombok所做的有關。
編輯:我注意到,有時它的工作(當我刪除整個數據庫)
由於這是一個hashCode調用,所以檢查你的hashCode方法中的邏輯 - 它們看起來是遞歸的或者遍歷整個對象模型。您可能不想依賴任何集合屬性調用hashCode。 – Chris
我正在使用lombok,所以我沒有真正負責實施 –
無論如何,lombok有一個選項可以從計算中排除某些字段,這就實現了! –