使用JPA以编程方式更改@Column的默认值

时间:2018-10-03 15:26:42

标签: jpa annotations spring-data-jpa spring-data

鉴于我有一个用@Column注释的字段,JPA将根据文件名在数据库的列上分配dafult名称。 EG:

@Column
private String someString;

在这种情况下,数据库中的列将称为SOMESTRING。

我希望在同一字段上存在另一个注释的情况下,导出数据库列名称的规则也有所不同。例如“ _” + FIELDNAME。

EG:

@Column
@SpecialColumn
private String someString;

在这种情况下,列名称应为:_SOMESTRING

最佳做法是什么? 谢谢!

1 个答案:

答案 0 :(得分:2)

纯JPA无法做到这一点。

起初,看起来似乎可以使用Hibernate。

Hibernate将确定列名分为两个步骤。

  1. 它确定“逻辑”名称。默认情况是您在@Column批注中提供的内容。

  2. 正在将其转换为“物理”名称。实际的数据库表列名称。

因此,听起来您应该尝试在第二步PhysicalNamingStrategy中完成。 但问题是,第二步没有任何数据来自何处,因此没有简单的方法来确定是否存在@SpecialColumn

但是我想人们可以使用自定义ImplicitNamingStrategy来调整第一步,以逻辑名称(例如,使用后缀。 不幸的是,这两种方法都无法让您轻松访问FieldMethod所在的注解。 它似乎只能使AttributePath可用,我不确定这是否足以满足您的目的。 但是我认为这是您唯一的机会。