当我进行连接时,为什么我必须指定实际的列名而不是字段名?

时间:2013-10-11 16:02:46

标签: java hibernate jpa jpa-2.0

One to many documentation

特别是在这一点:

@OneToMany
@JoinColumn(name="PART_ID")
public Set<Part> getParts() { return parts; }

我是否必须指定

name="PART_ID"

即。数据库中的实际列名称,而不是说

name="partId"

其中partIdpartId类中的Part数据成员。不指定实际列名PART_ID会失败吗?

2 个答案:

答案 0 :(得分:0)

当您执行连接时,on子句使用两个表中的列,不保证所使用的列是相邻表的主键。您指示源实体映射表上的哪个列需要用于连接。此外,没有任何保证字段名称与表格中的列名称不同,因为@Column可以将任何字段映射到任何列。

如果JPA不允许指定JoinColumn,则会强制执行数据库结构规则。想想在尝试在现有数据库上使用JPA时可能产生的影响,如果数据库不符合这些条件,这可能意味着大量代码更改。我认为规范编写者是一个非常合理的选择,允许指定列名。指定JoinColumn或甚至Column可为架构提供额外的灵活性。

如果要省略joincolumn的指定,可以始终遵循默认的JPA命名约定。

答案 1 :(得分:0)

这是因为您可以加入目标实体中未由字段表示的列,例如父对象与子对象,其中Child对象不包含对Parent对象的引用。