将OneToMany方面视为所有者

时间:2016-07-16 13:00:35

标签: java hibernate jpa one-to-many

我很难理解以下documentation的内容 评论是什么

  

我们需要复制物理

是什么意思?

使用insertable = false,updatable = false是什么意思? 拜托,你能帮忙吗?

  

将双向一个映射到多个,将一对多侧作为   拥有方,你必须删除mappedBy元素并设置许多   一个@JoinColumn作为可插入和可更新为false。这个解决方案   未经优化,将产生一些额外的UPDATE语句。

@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 个答案:

答案 0 :(得分:1)

  

我们需要复制物理

这意味着Hibernate将链接到Soldier实体中的列Troop以与Troop实体连接。我们必须编写连接SoldierTroop的列的物理名称。

  

使用insertable = false,updatable = false?

是什么意思

因为它是Troop实体的外键,并且由于约束而无法编辑它。首先创建Soldier,然后在此Troop中添加OneToMany

这个关于OneToMany地图的示例,当拥有边是insertable=false, updatable=false边时,所以这边有自己的关系,我们假设这边创建了第一个。您可以删除Soldier,但如果您的数据库中有约束并尝试使用新的Troop对象创建Troop,则可能会出现约束违规错误,因为这个新的Troop实体在{{1}}表格中不存在。