首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Hibernate文档中理解双向关系

从Hibernate文档中理解双向关系
EN

Stack Overflow用户
提问于 2014-08-24 09:39:51
回答 1查看 314关注 0票数 1

我正在浏览双向关系的Hibernate文档,在文档中它说:

示例7.21。双向一对多,多到一方作为关联所有者

代码语言:javascript
复制
@Entity
public class Troop {
    @OneToMany(mappedBy="troop")
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk")
    public Troop getTroop() {
    ...
}   

部队通过部队财产与士兵有双向的一对多的关系。您不必(不能)在mappedBy端定义任何物理映射。 要将一对多的双向元素映射为多个,以一对多的一方作为拥有方,您必须删除mappedBy元素,并将多个元素设置为一个@JoinColumn,作为可插入的,并可更新为false。此解决方案未进行优化,将产生其他更新语句。

示例7.22。作为所有者的一对多方的双向关联

代码语言:javascript
复制
@Entity
public class Troop {
    @OneToMany
    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
    public Troop getTroop() {
    ...
}

我发现很难理解这一点,因为我刚开始冬眠。

1)当医生说:You don't have to (must not) define any physical mapping in the mappedBy side.是什么意思?

2) 7.22中的@JoinColumn对于name属性具有相同的值(troop_fk)。我们可以指定不同的值吗?在这里设置insertable=false, updatable=false的优点和缺点是什么?

谁能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-24 10:08:38

是双向关联。因此,如果一名士兵向一支部队低头,那么这支部队就包含了该名士兵。这只是说同一件事的两种方式。

在Soldier中,您将告诉如何在数据库中表示关联:使用名为troop_fk的联接列:

代码语言:javascript
复制
@JoinColumn(name="troop_fk")
public Troop getTroop() {

因此,在双向关联的另一端重复相同的信息是多余的。你不能这么做。通过说

代码语言:javascript
复制
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {

您告诉Hibernate,getSoldiers()是双向关联的反面,映射该关联的方式可以在Soldier.troop属性上找到。

关于你的第二个问题。再一次,我们的目标是定义一个单一但双向的关联。映射单个关联不需要两个不同的外键。因此,为join列指定不同的名称是没有意义的:它将创建一个不同的单向关联。

这种做法是一种丑陋的攻击,AFAIK不受JPA规范的支持。JPA规范要求双向OneToMany关联的所有者方是多个方。实际上,它创建了两个以相同方式映射的单向关联,并告诉Hibernate (使用插入= false和updatable = false)在保存实体时忽略其中的一个。当从数据库中读取士兵时,它将填充soldier.troop,但是在保存士兵时,您放入soldier.troop中的任何内容都将被忽略。你应该避免这样做,IMHO。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25470379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档