2016-10-11 3 views
0

Ich möchte diese Methode excute:HashCode Loop-Aufruf: OneToMany JPA

@RequestMapping(value = "/list", method = RequestMethod.GET) 
public List<Project> listProjects() { 

    return ps.findAllProjects(); 
} 

Und in meinem DAO ich habe:

@Repository 
public interface ProjectDAO extends JpaRepository<Project, Long> { 
    List<Project> findAllProjectsByShowableTrue(); } 

Und in meiner Einheit:

1 Projekt:

.210

2. Mitarbeiter:

@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  
} 

Aber ich bin immer diese Fehlermeldung:

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) 

Jetzt, wenn der Mitarbeiter Tabelle leer ist: die Anforderung läuft perfekt, aber wenn ich hinzufügen, einen Kollaborateur Zu einem Projekt werden alle damit verbundenen Anfragen abgebrochen.

S.S. HashCode() & Equals() -Methoden werden automatisch generiert.

Jede Hilfe wäre willkommen. Tank dich.

Antwort

0

Ihre Project Klasse ruft collaborators.hashCode() an und Ihre Collaborators Klasse ruft project.hashCode() an.

Also, wenn ein Projekt einen Mitarbeiter hat man eine Endlosschleife bekommen, weil Project Anrufe Collaborator, Collaborator Anrufe Project und so weiter ...

+0

dann, was Sie vorschlagen? –

+0

Ich würde das 'Projekt' aus' Collaborator' 'hashCode' und' equals' nehmen, da es vermutlich ein veränderbares Feld sein wird. Ein "Kollaborateur" ist immer noch derselbe "Kollaborateur", egal ob er in "Projekt" A oder B ist. – djointster

Verwandte Themen