问题
我们构建了一个实习生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
。