之间有什么区别?
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... }
和
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
@JoinColumn 可以在关系的两边使用。现在的问题是关于使用@JoinColumn上@OneToMany侧(极少数情况下)。这里的重点是 物理信息重复 (列名)以及 未优化的SQL查询,这会产生一些其他UPDATE语句。
@JoinColumn
@OneToMany
UPDATE
根据文件:
由于 多对一的 (几乎)总是 所有者侧 的在JPA规范的双向关系中,一对多关联是通过注解@OneToMany(mappedBy=...)
@OneToMany(mappedBy=...)
@Entity public class Troop { @OneToMany(mappedBy="troop") public Set<Soldier> getSoldiers() { ... } @Entity public class Soldier { @ManyToOne @JoinColumn(name="troop_fk") public Troop getTroop() { ... }
Troop``Soldier通过troop属性具有双向的一对多关系。您不必(不必)在mappedBy侧面定义任何物理映射。
Troop``Soldier
mappedBy
要 以一对多方为拥有方 映射双向一对多,您必须删除mappedBy元素并将多对数设置@JoinColumn为as insertable和updatablefalse。此解决方案未经过优化,将产生一些其他UPDATE语句。
insertable
updatable
@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() { ... }