实体关系图:
我想收到翻译,但even2
会链接回翻译。
所以它会崩溃,因为它不断循环..
翻译实体:
element
元素实体:
package com.exstodigital.photofactory.model;
import javax.persistence.*;
import java.io.Serializable;
/**
* Created by youri on 21-09-16.
*/
@Table(name = "translation")
@Entity
public class Translation implements Serializable {
@Id
@GeneratedValue
private int id;
public int getId() {
return id;
}
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@OneToOne
@JoinColumn(name = "language_id")
private Language language;
public Language getLanguage() {
return language;
}
@OneToOne
@JoinColumn(name = "element_id")
private Element element;
public Element getElement() {
return element;
}
public Translation(int id, String text) {
this.id = id;
this.text = text;
}
public Translation() {
// Empty constructor
}
@Override
public boolean equals(Object obj) {
return obj instanceof Translation && (!this.text.equals(((Translation) obj).text));
}
}
TranslationDaoImpl:
package com.exstodigital.photofactory.model;
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by youri on 21-09-16.
*/
@Entity
@Table(name = "element")
public class Element implements Serializable {
@Id
@GeneratedValue
private int id;
public int getId() {
return id;
}
private String label;
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@OneToMany
@JoinColumn(name = "element_id")
private List<Translation> translations = new ArrayList<>();
public List<Translation> getTranslations() {
return Collections.unmodifiableList(translations);
}
public Element(int id, String label) {
this.id = id;
this.label = label;
}
public Element() {
// Empty constructor
}
@Override
public boolean equals(Object obj) {
return obj instanceof Element && (this.id != ((Element) obj).id || !this.label.equals(((Element) obj).label));
}
}
答案 0 :(得分:1)
你已经建立了错误的关系,从一方面你给OneToOne和同一个但是从第二个实体你给OneToMany
您的代码:
@Table(name = "translation")
@Entity
public class Translation implements Serializable {
@OneToOne
@JoinColumn(name = "element_id")
private Element element;
}
@Entity
@Table(name = "element")
public class Element implements Serializable {
@OneToMany
@JoinColumn(name = "element_id")
private List<Translation> translations = new ArrayList<>();
}
OneToOne的正确代码:
@Table(name = "translation")
@Entity
public class Translation implements Serializable {
@JsonIgnore
@OneToOne
@JoinColumn(name = "element_id")
private Element element;
}
@Entity
@Table(name = "element")
public class Element implements Serializable {
@OneToOne
(mappedBy="element")
private Translation translation;
}
OneToMany的正确代码:
@Table(name = "translation")
@Entity
public class Translation implements Serializable {
@JsonIgnore
@ManyToOne
@JoinColumn(name = "element_id")
private Element element;
}
@Entity
@Table(name = "element")
public class Element implements Serializable {
@OneToMany
(mappedBy="element")
private List<Translation> translations;
}
使用“@JsonIgnore”来避免进入你的无限递归 代码