2017-11-01 14 views
1

あるリストはネストされた例外は、私はクラスを持っているjava.lang.StackOverflowErrorを

... 
at org.eclipse.persistence.indirection.IndirectSet.buildDelegate(IndirectSet.java:225) ~[org.eclipse.persistence.core-2.7.0.jar:na] 
    at org.eclipse.persistence.indirection.IndirectSet.getDelegate(IndirectSet.java:436) ~[org.eclipse.persistence.core-2.7.0.jar:na] 
    at org.eclipse.persistence.indirection.IndirectSet.hashCode(IndirectSet.java:485) ~[org.eclipse.persistence.core-2.7.0.jar:na] 
    at com.core.jpa.entity.MovieEntity.hashCode(MovieEntity.java:21) ~[classes/:na] 
    at com.core.jpa.entity.movie.MovieRate.hashCode(MovieRate.java:16) ~[classes/:na] 
    at java.util.HashMap.hash(HashMap.java:338) ~[na:1.8.0_144] 
    at java.util.HashMap.put(HashMap.java:611) ~[na:1.8.0_144] 
    at java.util.HashSet.add(HashSet.java:219) ~[na:1.8.0_144] 
    at org.eclipse.persistence.queries.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:968) ~[org.eclipse.persistence.core-2.7.0.jar:na] 
... 

すべて間違って私を投げるmovie.getRatings()のロード中にリスト

@Entity 
@Table(name = "movies_ratings") 
@Data 
public class MovieRate { 
    ... 
} 

をマップ

@Entity 
@Table(name = "movies") 
@Data 
public class MovieEntity implements Serializable { 
    ... 

    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL) 
    private Set<MovieRate> ratings; 
} 

https://pastebin.com/RgNg84Cb

問題はおそらくロンボクの注釈にあります。しかし、私は何を知りません。

+0

両方のクラスのhashCodeを投稿してください –

+0

'MovieRate'には' MovieEntity'の関連付けがありますか? –

+0

@ O.Badrは映画の地図ですか? ManyToOne プライベートMovieEntityムービー; –

答えて

1

どうやら、例外はあなたの問題を解決するために、Lombokによって生成されMovieRate.hashcode()MovieEntity.hascode()の両方によって引き起こされますがMovieRateMovieEntityまたは両方に@EqualsAndHashCodeを追加する可能性があります。

@Entity 
@Table(name = "movies") 
@Data @EqualsAndHashCode(exclude = "ratings") 
public class MovieEntity implements Serializable { 
    // Your code 
} 

または

@Entity 
@Table(name = "movies_ratings") 
@Data @EqualsAndHashCode(exclude = "movie") 
public class MovieRate { 
    ... 
} 

なぜですか? @DatahashCode()生成するために、(それが@EqualsAndHashCodeを使用して):

デフォルトでは、それは

だから、MovieEntity.ratingsMovieRate.movieを同様に使用するすべての非静的、非transientフィールドを使用します一方の側のhashCode()メソッドの各呼び出しは、もう一方の側のhashCode()を呼び出し、双方向の関連付けとして、java.lang.StackOverflowErrorまで無限に実行されます。

注:それぞれが反対側を印刷しようとするようにあなたは、両方のエンティティのために同じ(また@Dataによって生成される)toString()のエラー方法を有することになります。これを解決するには、@ToStringを追加して同じフィールドを除外することができます。

関連する問題