我有一个“问题”实体,可以将其保留到“问题”表中。一个问题可以有多种翻译。翻译只是另一种语言的另一个问题,与其带有parent_id字段的父问题相关联。因此,问题表具有 Question_id (int)、parent_id (int)、语言 (varchar)、prompt 等列。在我的设计中,parent_id 与翻译的 Question_id 相同。例如,假设我有一个 id 为 13 和 17 的英文问题(默认),而问题 13 有 3 个翻译:中文、日文和韩文。那么问题表将如下所示:
Question_id Parent_id 语言
13 13 英语;14 13 中文;15 13 日语;16 13 韩语;17 17 英语
在 Question 对象中,我想将问题与其翻译的关系映射为 @OneToMany 自引用关系。经过一些研究后,我通过以下方式实现了它:
@Entity
@Table(name = "question")
public class Question {
@Id
@GeneratedValue
@Column(name = "id")
private Integer id;
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="parent_id")
private Question parent;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
private Set<Question> translations;
Other properties...
Getters and setters....
}
Run Code Online (Sandbox Code Playgroud)
但是,由于它是自引用关系,我不理解以下内容: