当前位置: 首页 > 知识库问答 >
问题:

在Hibernate中是否强制使用@JoinCol列注释?

施鸿
2023-03-14

在Hibernate中,要指定用于加入关联的列,请使用@JoinCol列注释,例如:

@ManyToOne
@JoinColumn(name="address_id")
public Address getAddress() { 
    return address; 
}

在大多数情况下,列的名称是用大写的类名加上\u id。因此,从Hibernate自动派生它是合理的(例如,在Django的ORM中就是这样做的)。但这样的行为是以某种方式实施的吗?

共有2个答案

端木飞
2023-03-14

没有必要有@JoinCol列注释。您可以随时覆盖它。如果您不在代码中提供它,那么Hibernate将自动为您生成一个,即您的列的默认名称。

邓嘉致
2023-03-14

没有必要,JPA遵循约定优先于配置原则,这意味着总有一些默认值可以用注释覆盖。

@JoinColumn的情况下,默认列名是这样生成的:

field_name在您的情况下是地址,而id_column_name引用相关实体的id,即id。因此,默认情况下您会得到address_id

 类似资料:
  • 我有两个实体 和 此映射: 最近增加了。 在运行应用程序时,应用程序崩溃,错误是:通过JDBC语句执行DDL“alter table documents add debt__idbigint not null”时出错 我检查了Hibernate发送到数据库的sql查询,它是:更改表文档添加debt_idbigint不null 此查询失败,因为表上已经有记录,因此无法添加不带默认值的不可为空列。 那

  • 本文向大家介绍在Java中使用@FunctionalInterface批注标记功能接口是否是强制性的?,包括了在Java中使用@FunctionalInterface批注标记功能接口是否是强制性的?的使用技巧和注意事项,需要的朋友参考一下 仅用一种抽象方法定义的接口称为功能接口。使用 @FunctionalInterface批注标记功能接口不是强制性的,编译器不会抛出任何错误。但是,最好使用@Fu

  • 我有一个hibernate代码,它与默认的联接列值配合得很好,但是当我将联接列值更改为应用程序约定所需的值时,它开始崩溃。 之前:

  • 问题内容: 是否有一个静态分析工具可以在IDE外部运行一致地强制使用@Override注释?CheckStyle具有MissingOverride检查,但仅适用于使用@inheritDoc Javadoc标记的方法。我正在寻找一种可以在连续集成计算机上的新构建配置中运行的工具。 问题答案: 一种方法是使用TeamCity的“检查”运行器。我不确定它是否真的可以在IDE之外运行,因为它是在Intel

  • 问题内容: 我知道SO和网络上都有很多这些问题,但是所有答案都建议使用特定于数据库的信息,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行。 我发现这个hibernate问题,有人要求使用此功能进行注释。该问题已经解决,表示另一个问题将涉及该功能。第二个问题显然添加了注释以及其他一些注释,但是我找不到有关如何使用这些新注释定义默认列值的文档。 所以我的问题是:有谁知道我该如何定义带注释

  • 我尝试了以下帖子中的建议,并查看了Moment.js转换日期UTC给出错误日期的文档 但最终结果是结果为1999-09-07T23:00:00.000z,因此没有存储正确的输入日期。 我现在正在使用以下formatDate函数格式化日期。但是,当我将计算机上的时区更改为智利时,日期1999-09-07 GMT-0200变为1999-09-08T00:00:00.000Z。 是不是我错过了什么?