gpt4 book ai didi

java - Hibernate如何在中间表中添加一列

转载 作者:行者123 更新时间:2023-11-30 11:51:52 25 4
gpt4 key购买 nike

这是详细信息。

我有 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 未公开。谢谢

最佳答案

最好的方法是使用元素集合。

@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 中添加一些其他方法来获取所有类别(没有用户)或将其作为 map 检索,或其他任何方式。如果需要,您可以通过封装完全隐藏此中间对象。

关于java - Hibernate如何在中间表中添加一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com