使JPA@Column名称特定于db方言或取决于属性



问题

我们构建了一个实习生javaspring框架,用于两个不同的项目。一个项目使用OracleDB,另一个项目则使用MS SQL。

当谈到保留关键字时,MS SQL抱怨key。因此,我们通过转义修复了列名:

public class MyEntity {
@Column(name = ""key"")
private String key;
private String foo;

但现在它不再在oracledb中工作,因为生成的sql现在包含转义符:

  • select myEntity."key", myEntity.foo from myEntity
  • (java.sql.SQLSyntaxErrorException: ORA-00904: "myEntity."key": invalid identifier")

问题

  • 是否可以根据db方言或某些外部属性在一个属性上有两个javax.persistence.Column注释
  • 是否有可能编写自己的注释并区分这两种情况?(我想实体扫描不会考虑自己的注释(

这里的问题是,在Oracle中对标识符进行双引号引用会使其区分大小写。如果创建的Oracle架构没有带引号的列定义,则默认情况下,创建的列名为大写。

另一方面,由于MSSQL默认情况下不区分大小写,我怀疑@Column(name = ""KEY"")会起作用(MSSQL将忽略大小写,而大写名称将与Oracle的列定义相匹配(。

是否可以根据db方言或某些外部属性在一个属性上有两个javax.persistence.Column注释?

您可以使用XML实体映射覆盖列注释。

是否可以编写自己的注释并区分这两种情况?(我想实体扫描不会考虑自己的注释(

没有。不过,也许您可以实现一个自定义的PhysicalNamingStrategy

最新更新