Class A{
public A(){
a= new A();
}
}
0: aload_0
1: invokespecial #1; //Method java/lang/object .<init>
4: aload_0
5: new #2; //class A
8: dup
9: invokespecial #3; //Method java/lang/object .<init>
12: putfield #4; //Field a:LA;
15: return
public class User {
private List<Letter> lettersForFromId;
private List<Letter> lettersForToId;
public User() {}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userByFromId")
public List<Letter> getLettersForFromId() {
return this.lettersForFromId;
}
public void setLettersForFromId(List<Letter> lettersForFromId) {
this.lettersForFromId = lettersForFromId;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userByToId")
public List<Letter> getLettersForToId() {
return this.lettersForToId;
}
public void setLettersForToId(List<Letter> lettersForToId) {
this.lettersForToId = lettersForToId;
}
}
多對一類:Letter.java
public class Letter extends IdEntity {
private static final long serialVersionUID = -2305610965537901463L;
private User userByToId;
private User userByFromId;
public Letter() {
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "to_id", nullable = false)
public User getUserByToId() {
return this.userByToId;
}
public void setUserByToId(User userByToId) {
this.userByToId = userByToId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "from_id", nullable = false)
public User getUserByFromId() {
return this.userByFromId;
}
public void setUserByFromId(User userByFromId) {
this.userByFromId = userByFromId;
}
看到上面例子,仔細對比一下,不難發現. 導致我的User與Letter無限遞歸,導致陷入死循環,導致棧溢出.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "to_id", nullable = false)
@JsonIgnore
public User getUserByToId() {
return this.userByToId;
}