Java 使JPA@Column name特定于db方言或取决于属性
问题 我们构建了一个InternJavaSpring框架,用于两个不同的项目。一个项目使用OracleDB,另一个项目使用MS SQL 当谈到保留关键字时,MS SQL抱怨Java 使JPA@Column name特定于db方言或取决于属性,java,sql-server,oracle,jpa,Java,Sql Server,Oracle,Jpa,问题 我们构建了一个InternJavaSpring框架,用于两个不同的项目。一个项目使用OracleDB,另一个项目使用MS SQL 当谈到保留关键字时,MS SQL抱怨key。 因此,我们通过转义修复了列名: public class MyEntity { @Column(name = "\"key\"") private String key; private String foo; 但现在它不再在oracle db中工作,
key
。
因此,我们通过转义修复了列名:
public class MyEntity {
@Column(name = "\"key\"")
private String key;
private String foo;
但现在它不再在oracle db中工作,因为生成的sql现在包含转义字符:
从myEntity中选择myEntity.“键”,myEntity.foo
(java.sql.SQLSyntaxErrorException:ORA-00904:“myEntity.”key:无效标识符”)
- 根据db方言或某些外部属性,是否可能在一个属性上有2个javax.persistence.Column注释
- 是否有可能编写自己的注释,然后区分这两种情况?(假设实体扫描不考虑自己的注释)
@Column(name=“\”KEY\”)
会起作用(MSSQL将忽略大小写,而大写名称将匹配Oracle的列定义)
根据db方言或某些外部属性,是否可能在一个属性上有2个javax.persistence.Column注释
可以使用XML实体映射覆盖列注释
是否有可能编写自己的注释,然后区分这两种情况?(假设实体扫描不考虑自己的注释)
没有。不过,也许您可以实施一个自定义的
物理命名策略。谢谢。所以我的假设是错误的,为什么我的sql语句不能工作。但是更改裸sql语句(大写键)表明该解决方案可以工作。如果其他人会遇到:我还考虑在ms sql项目中设置“hibernate.globally_quoted_identifiers=true”,以避免对ms sql进行特殊处理。