@JoinColumn 注释在 Hibernate 中是强制性的吗?
Is @JoinColumn annotation mandatory in Hibernate?
在Hibernate中,指定一个列用于加入关联,使用@JoinColumn注解,例如这样:
@ManyToOne
@JoinColumn(name="address_id")
public Address getAddress() {
return address;
}
在大多数情况下,列的名称是蛇形 class 名称加上 _id
。因此期望 Hibernate 自动派生它是合理的(就像在 Django 的 ORM 中所做的那样)。但是这种行为是否以某种方式实现了?
这不是必需的,JPA 遵循约定优于配置原则,这意味着总有一些默认值可以用注释覆盖。
在 @JoinColumn
的情况下,默认列名称生成如下:<field_name>_<id_column_name>
field_name
在您的例子中是 address
,而 id_column_name
指的是相关实体的 ID,即 id
。因此,您默认得到 address_id
。
不需要@JoinColumn
注解。您可以随时覆盖它。如果您不在代码中提供它,那么 Hibernate 会自动为您生成一个,即列的默认名称。
在Hibernate中,指定一个列用于加入关联,使用@JoinColumn注解,例如这样:
@ManyToOne
@JoinColumn(name="address_id")
public Address getAddress() {
return address;
}
在大多数情况下,列的名称是蛇形 class 名称加上 _id
。因此期望 Hibernate 自动派生它是合理的(就像在 Django 的 ORM 中所做的那样)。但是这种行为是否以某种方式实现了?
这不是必需的,JPA 遵循约定优于配置原则,这意味着总有一些默认值可以用注释覆盖。
在 @JoinColumn
的情况下,默认列名称生成如下:<field_name>_<id_column_name>
field_name
在您的例子中是 address
,而 id_column_name
指的是相关实体的 ID,即 id
。因此,您默认得到 address_id
。
不需要@JoinColumn
注解。您可以随时覆盖它。如果您不在代码中提供它,那么 Hibernate 会自动为您生成一个,即列的默认名称。