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

使用JPA以编程方式更改@Column的默认值,jpa,annotations,spring-data-jpa,spring-data,Jpa,Annotations,Spring Data Jpa,Spring Data,假设我有一个用@Column注释的字段,JPA将根据该字段的名称在数据库中的列上分配dafult名称。例如: @Column private String someString; 在这种情况下,DB中的列将被称为SOMESTRING 我希望在同一字段上有另一个注释的情况下,派生数据库列名的规则是不同的。例如“u”+字段名 例如: 在这种情况下,列名应为:\ u SOMESTRING 最好的做法是什么? 谢谢大家! 普通JPA无法做到这一点 起初,看起来应该可以使用Hibernate Hiber

假设我有一个用@Column注释的字段,JPA将根据该字段的名称在数据库中的列上分配dafult名称。例如:

@Column
private String someString;
在这种情况下,DB中的列将被称为SOMESTRING

我希望在同一字段上有另一个注释的情况下,派生数据库列名的规则是不同的。例如“u”+字段名

例如:

在这种情况下,列名应为:\ u SOMESTRING

最好的做法是什么?
谢谢大家!

普通JPA无法做到这一点

起初,看起来应该可以使用Hibernate

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

  • 它确定“逻辑”名称。默认值是在
    @列
    注释中提供的内容

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

  • 因此,听起来你想做的事情应该在第二步中完成。 但问题是,第二步没有任何数据来源的信息,因此无法轻松确定是否存在
    @SpecialColumn

    但是我想我们可以调整第一步,使用一个自定义的名称来编码逻辑名称中的信息,例如使用后缀。 不幸的是,这两种方法都不能让您轻松访问
    字段
    ,或者
    方法
    ,您可以在其中找到注释。 它似乎只提供了可用的,我不确定这是否足以满足您的目的。
    但我认为这是你唯一的机会。

    普通的JPA没有办法做到这一点

    起初,看起来应该可以使用Hibernate

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

  • 它确定“逻辑”名称。默认值是在
    @列
    注释中提供的内容

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

  • 因此,听起来你想做的事情应该在第二步中完成。 但问题是,第二步没有任何数据来源的信息,因此无法轻松确定是否存在
    @SpecialColumn

    但是我想我们可以调整第一步,使用一个自定义的名称来编码逻辑名称中的信息,例如使用后缀。 不幸的是,这两种方法都不能让您轻松访问
    字段
    ,或者
    方法
    ,您可以在其中找到注释。 它似乎只提供了可用的,我不确定这是否足以满足您的目的。 但我认为这是你唯一的机会

    @Column
    @SpecialColumn
    private String someString;