java - HashCode 循环调用 : OneToMany JPA

标签 java mysql spring hibernate jpa

我想执行这个方法:

@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 调用 CollaboratorCollaborator 调用 Project等等...

关于java - HashCode 循环调用 : OneToMany JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978314/

相关文章:

javascript - mysql 数据库中的事件未按 ID 显示

java - 使用 JPA 实体管理器时,我可能会从 Hibernate Session 中错过什么,反之亦然?

java - 如何从 OAuth2 客户端应用程序中的授权服务器获取作为访问 token 响应一部分的附加信息

java - 如何在 hadoop 应用程序中覆盖 InputFormat 和 OutputFormat

Java - 键值决策

java - 将布局文件添加到类中(Java Android Studio)

java - powershell运行java进程问题

php - php中从mysql外键表获取数据

mysql - 书店的最佳销售数据库结构

java - 身份验证请求失败 : Bad credentials [LDAP: error code 49 - data 52e, v1db1]