java多通HashCode与Equal实现
我有三个这样的实体:
1。项目:
@Entity
public class Project implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", unique=true )
private Long id;
@OneToMany(mappedBy="project", fetch = FetchType.EAGER)
private Set<Collaborator> collaborators = new HashSet<>();
//Getters & Setters
}
2。用户:
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@OneToMany(mappedBy="user", fetch = FetchType.EAGER)
private Set<Collaborator> collaborators = new HashSet<>();
//Getters & Setters
}
3。合作者:
@Entity
public class Collaborator implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ProjectID" , nullable = true)
private Project project;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "UserID", nullable = true)
private User user;
//Getters & Setters
}
hashCode&;需要实施平等吗
因为当我用Eclipse自动生成它们时,我会得到一个StackOverFlow Error
,这是一个永无止境的循环
任何建议都将不胜感激,谢谢
# 1 楼答案
首先,很抱歉我的英语很差,但我相信你的错误是把所有字段都放在了方法equals和hashCode中。您必须只放置“普通”字段,而不是列表和集合
请尝试这样做,如果解决了这个问题,在回答之后
# 2 楼答案
您应该使用“业务密钥平等”实现
equals
和hashcode
https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/persistent-classes-equalshashcode.html
在您的情况下,应该只使用
id
字段您可以在Eclipse生成
hashcode
和equals
方法时选择此字段