特别是在这一点:
@OneToMany
@JoinColumn(name="PART_ID")
public Set<Part> getParts() { return parts; }
我是否必须指定
name="PART_ID"
即。数据库中的实际列名称,而不是说
name="partId"
其中partId
是partId
类中的Part
数据成员。不指定实际列名PART_ID
会失败吗?
答案 0 :(得分:0)
当您执行连接时,on
子句使用两个表中的列,不保证所使用的列是相邻表的主键。您指示源实体映射表上的哪个列需要用于连接。此外,没有任何保证字段名称与表格中的列名称不同,因为@Column
可以将任何字段映射到任何列。
如果JPA不允许指定JoinColumn
,则会强制执行数据库结构规则。想想在尝试在现有数据库上使用JPA时可能产生的影响,如果数据库不符合这些条件,这可能意味着大量代码更改。我认为规范编写者是一个非常合理的选择,允许指定列名。指定JoinColumn
或甚至Column
可为架构提供额外的灵活性。
如果要省略joincolumn的指定,可以始终遵循默认的JPA命名约定。
答案 1 :(得分:0)
这是因为您可以加入目标实体中未由字段表示的列,例如父对象与子对象,其中Child对象不包含对Parent对象的引用。