当前位置: 首页 > 知识库问答 >
问题:

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

胡意致
2023-03-14

问题

我们建立了一个实习生Java spring的框架,我们在两个不同的项目中使用。一个项目使用OracleDB,另一个项目使用MS SQL。

当涉及保留的关键字时,MS SQL正在抱怨key。因此我们通过转义来修复列名:

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

但现在它在oracle db中不再起作用了,因为生成的sql现在包含转义字符:

  • 从myEntity
  • 中选择myEntity.key,myEntity.foo
  • (java.sql.sqlsyntaxerrorexception:ora-00904:“myEntity.key”:无效标识符“)

问题

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

共有1个答案

穆英飙
2023-03-14

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

另一方面,由于MSSQL默认不区分大小写,所以我怀疑@column(name=“\”key\“”)会起作用(MSSQL将忽略大小写,而大写名称将与Oracle的列定义匹配)。

是否可能根据db方言或某些外部属性,在一个属性上有2个javax.persistence.column注释?

可以使用XML实体映射重写列注释。

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

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

 类似资料:
  • 问题内容: 我想要一些属性,可以在Spring bean中通过@Value引用,只能依赖于其他属性来创建。特别是我有一个属性,它描述目录的文件系统位置。 按照约定,该目录中有一个文件,始终称为 myfile.txt 。 现在,我想通过我的bean内的@Value注释访问目录和文件。有时我想以String形式访问它们,有时以java.io.Files形式访问它们,有时以org.springframe

  • 通过使用JavaScript,是否有一种方法可以知道特定属性来自哪个名称空间? 我似乎找不到任何与这个问题相关的东西... 示例: 具有class属性的DIV元素。类来自哪个命名空间? 具有viewBox属性的SVG元素。viewBox来自哪个命名空间? 编辑: 如果希望在USE元素上设置“xlink:href”属性,则必须指定名称空间“http://www.w3.org/1999/xlink”。

  • 当类使用具有相同属性的两个特征时,如何解决属性名称冲突? 示例: 提前道谢!

  • 我们在 field 对应的 Tag 中对 Column 的一些属性进行定义,定义的方法基本和我们写SQL定义表结构类似,比如: type User struct { Id int64 Name string `xorm:"varchar(25) notnull unique 'usr_name' comment('姓名')"` } 对于不同的数据库系统,数据类型其实

  • 哪个编译器就在这里?

  • 问题内容: 我知道命名约定之所以重要,有许多原因,其中大部分与使您的代码更具可读性,更易于集成到更大的项目等有关。在Java中,大多数约定都要求方法名称以动词开头。 我的问题是:如何选择动词来开始方法名称? 为了使这个问题不再那么含糊,我经常选择一种方法名称作为描述输出的名词。在这种情况下,我通常追加通用动词如之间徘徊,,,等在名词的字体,以符合动词规则。是否有关于何时使用的通用指南? 这是一个例