这是详细信息。
我有2个具有一对多关系的实体表。
首先,Exam
类有许多Category
类。 Hibernate生成这个表
______________
Exam
- Id
- Name
- Category
______________
Category
- Id
- Name
______________
Exam_Category
- Exam_Id
- Category_Id
我需要在Exam_Category
表中添加一个额外的列
例如:
______________
Exam_Category
- Exam_Id
- Category_Id
* User_Id
我将如何实现这一目标。如果有的话,我将如何获得user_id
值,因为Exam_Category
未公开。感谢
答案 0 :(得分:1)
执行此操作的最佳方法是使用元素集合。
@Entity
public class Exam {
@CollectionOfElements(fetch = FetchType.LAZY)
@JoinTable(name = "EXAM_CATEGORY", joinColumns = @JoinColumn(name = "FK_EXAM"))
public Set<CategoryEntry> getCategories() {
return this.categories;
}
}
@Embeddable
public class CategoryEntry{
private Category category;
private User user;
@ManyToOne
@JoinColumn(name = "FK_CATEGORY", nullable = false)
public Category getCategory() {
return this.category;
}
@ManyToOne
@JoinColumn(name = "FK_USER", nullable = false)
public User getUser() {
return this.user;
}
// ... setters and such
}
@Entity
public class Category {
}
这种方法比将其映射为实体更简洁,因为从逻辑上讲,它不是一个开头的实体。
然后你可以在Exam
中添加一些其他方法来获取所有类别(没有用户)或将其作为地图或其他任何方式检索。如果需要,您可以通过封装完全隐藏此中间对象。
答案 1 :(得分:0)
这是涉及三个表(三个外键)的多对多关系的情况。这在Hibernate中无法通过简单的映射实现。您必须扩展实体类的定义以支持“中间”表中的自定义主键列·
查看this参考。
答案 2 :(得分:0)
您可以在Exam类中使用Map字段。见this post