@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 会自动为您生成一个,即列的默认名称。