我想执行这个方法:
@RequestMapping(value = "/list", method = RequestMethod.GET)
public List<Project> listProjects() {
return ps.findAllProjects();
}
在我的 DAO 中我有:
@Repository
public interface ProjectDAO extends JpaRepository<Project, Long> {
List<Project> findAllProjectsByShowableTrue(); }
在我的实体中:
<强>1。项目:
@Transactional
@Entity
public class Project implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
private boolean showable = true;
@OneToMany(mappedBy="project", fetch = FetchType.EAGER)
private Set<Collaborator> collaborators = new HashSet<>();
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((collaborators == null) ? 0 : collaborators.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
}
//Getters & setters
}
<强>2。合作者:
@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;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((project == null) ? 0 : project.hashCode());
return result;
}
//Getters & setters
}
但是我收到了这个错误:
HTTP Status 500 - Handler dispatch failed; nested exception is java.lang.StackOverflowError
root cause
java.lang.StackOverflowError
java.net.AbstractPlainSocketImpl.available(Unknown Source)
java.net.SocketInputStream.available(Unknown Source)
.........
gestionprojet.java.entities.beans.Project.hashCode(Project.java:179)
gestionprojet.java.entities.beans.Collaborator.hashCode(Collaborator.java:88)
现在,当协作者表为空时:请求运行完美,但是当我将协作者添加到项目时,所有相关请求都被破坏了。
附言: HashCode() 和 Equals() 方法是自动生成的。
如有任何帮助,我们将不胜感激。坦克你。
最佳答案
您的 Project
类正在调用 collaborators.hashCode()
而您的 Collaborators
类正在调用 project.hashCode()
。
所以当一个项目有一个合作者时,你会得到一个无限循环,因为 Project
调用 Collaborator
,Collaborator
调用 Project
等等...
关于java - HashCode 循环调用 : OneToMany JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978314/