JPAを使用してAppEngineの2つのエンティティとの関係を構築しようとしていますが、現在このエラーが発生しています。
java.io.IOException: com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain
私のエンティティは次のようになります。
@Entity
public class MyUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
private List<MyMessage> messages;
}
この:
@Entity
public class MyMessage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
@ManyToOne(optional=false)
private MyUser user;
}
ユーザーはすでに存在します。ここで、新しいメッセージを挿入して再帰エラーを取得します。
EntityManager mgr = getEntityManager();
MyUser myuser = mgr.find(MyUser.class, KeyFactory.createKey("MyUser", user.getEmail()));
mymessage.setUser(myuser);
myuser.addMessage(mymessage);
mgr.persist(myuser);
mgr.persist(mymessage);
JPAとAppEngineのガイドライン内でこの関係をどのように設定する必要がありますか?ありがとうございました!
アップデート
私の問題は、JPAではなくジャクソンに関するものでした。JPAの関係は問題ありませんが、メッセージを参照するユーザーなどを参照するメッセージのシリアル化で無限の再帰が発生するため、関係を削除してコードで管理する必要がありました。また、MyMessageのユーザープロパティに@Transientという注釈を付けて、既存の子が所有する親の永続化について不平を言うのを避ける必要がありました。