【发布时间】:2012-03-02 22:27:13
【问题描述】:
所以我昨天问了这个问题,但是目标帖子变了,问题也不一样了:
Hibernate / JPA Collection of Elements with Many to Many relationship?
我想知道是否可以创建实体来模拟我所需的关系,以便在我启动我的应用程序时 Hibernate 将创建我的架构。
我想要的关系是这样的:
问题是 Join 表实际上可以包含不链接到任何元素的行。该结构表示基于“类型”和“值”对的元素分类,并在此特定应用程序之外输入到系统中。
我希望能够通过映射将我的 Element Hibernate Entity 设置为包含类别列表,这样我就可以实际看到我的元素属于哪些类别,并且 hibernate 为我创建表.
这是我到目前为止所得到的:在我的 Element Entity 类中映射它,如下所示:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
@JoinColumn(name = "type", referencedColumnName = "type"),
@JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
return categories;
}
这完成了我想要的大部分工作,它创建了我的表格,就像我希望他们禁止一件事一样,在 (type,value) 对的元素表中添加了一个唯一约束。我不希望这样,因为多个元素可以具有相同的类型和值对,我需要能够从开始创建时停止唯一约束,但无法弄清楚当前映射如何,我可以这样做吗?我错过了多对多关系的要点吗?
【问题讨论】:
-
我仍然认为您需要一个 inverseJoinColumn 来将 ElementCategory 的 id 包含在您的联接表中。
-
类型和值是一个实体听起来更合乎逻辑吗?所以这个类型的id,值实体是joinable的joincolumn
-
ID 隐含在我有一组元素类别这一事实中,就像任何集合一样。正如我所说,表的设置正确,其中包括连接表中的“类别”和 ElementCategory 表中的“id”之间的链接。你认为反向连接会从元素表中删除唯一约束吗?我试试看。
-
我只是在大声思考:)
-
另外你是对的,将类型和值对建模为实体更合乎逻辑,但我无法更改元素表,因为我无法控制访问它的前端。
标签: java hibernate many-to-many composite-key unique-constraint