具体在这一点:
@OneToMany
@JoinColumn(name="PART_ID")
public Set<Part> getParts() { return parts; }
我是否必须指定
name="PART_ID"
即数据库中的实际列名,而不是说
name="partId"
partId
类中的partId
数据成员在哪里Part
。指定实际的列名不会破坏PART_ID
目的吗?
It's because you can join on a column not represented by a field in the target entity, e.g. a parent/child relationship where the Child object does not contain a reference to the Parent object.
当您执行连接时,on
子句使用两个表中的列,不能保证所使用的列是相邻表的主键。您指示需要将源实体映射表上的哪一列用于连接。也不能保证字段名称与表中的列名称不同,因为@Column
可以将任何字段映射到任何列。
如果 JPA 不允许JoinColumn
指定 ,它将在您的数据库结构上强制执行规则。想想当试图在现有数据库上使用 JPA 时这会产生什么影响,如果数据库不满足这些条件,这可能意味着大量代码更改。我认为规范编写者允许指定列名是一个非常合理的选择。指定JoinColumn
或什Column
至为体系结构增加了一层灵活性。
如果您想省略连接列的指定,您始终可以遵循默认的 JPA 命名约定。