Java 如何告诉Hibernate annotation@Column区分大小写?
我试图在一个名为ECM的表中使用Hibernate在Sybase db上执行一个简单的SELECT查询。我用以下方式注释了我的DBO:Java 如何告诉Hibernate annotation@Column区分大小写?,java,hibernate,jpa,annotations,sybase,Java,Hibernate,Jpa,Annotations,Sybase,我试图在一个名为ECM的表中使用Hibernate在Sybase db上执行一个简单的SELECT查询。我用以下方式注释了我的DBO: @Entity @Table(name="ECM") public class RelationshipDbo { ... } 但是,我面临一个“TableNotFound”错误:生成的SQL表名是小写的。我无法更改数据库配置,使其不区分大小写 我也尝试过这样引用: @Table(name="`ECM`") 这是: @Table(name="'ECM
@Entity
@Table(name="ECM")
public class RelationshipDbo {
...
}
但是,我面临一个“TableNotFound”错误:生成的SQL表名是小写的。我无法更改数据库配置,使其不区分大小写
我也尝试过这样引用:
@Table(name="`ECM`")
这是:
@Table(name="'ECM'")
结果:在查询中添加了引号,但表名仍然从大写转换为小写
技术资料:
Hibernate 4.3
JPA 1.2
org.hibernate.dialect.SybaseDialect
你们知道吗
编辑:也尝试了此操作
然后,我的列名和表名会被自动引用,但名称仍然是小写的。请尝试以下操作:
如@Table(name=“`ECM`”)中所示使用反勾号
这必须从休眠点开始工作。若并没有,那个么问题应该在DB中(若我并没有错的话)你们的Sybase DB版本是什么?
Sybase方言
在Hibernate 3.5中被弃用,然后从Hibernate 4.1开始重构,使用一系列子类匹配不同版本的Sybase。您是否尝试过其中一个子类,看看它是否有什么不同
- org.hibernate.dialogue.sybase11方言
- org.hibernate.dialogue.sybaseanywhere方言
- org.hibernate.dialogue.sybasease15dialogue
我想我有你的答案:
基本上,您需要更改JPA提供者的命名策略。如何做到这一点将取决于您如何设置项目
在我的例子中,我使用spring引导数据将application.properties中的一个属性设置为
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy
如果没有您提供更多的详细信息,我就无法给出更多的细节。我的目标有点不同,因为我尝试用大写创建表,hibernate用小写创建表。而且我使用的是MySQL而不是Sybase。
但对我来说,引用这样的名字是有效的:
@Entity
@Table(name="\"ECM\"")
public class RelationshipDbo {
...
}
然后用大写字母创建表。也许这对查询也有帮助。已经测试过了,但没有成功,正如我在帖子中所说的。问题是,即使被引用,ECM字母也会因为某些原因而被小写。谢谢,尝试了三种可能的方言,但生成的SQL保持不变:总是我的表名小写..奇怪。我运行了一个快速测试,在现有项目中切换到Sybase方言(在mem db中使用H2),我的SQL输出中的情况是正确的。。我在配置中看到的主要区别是我使用的是JPA2.1。我不确定这是否有什么不同。嗨@Deathtiny,你能找到这个问题的解决方案吗,我也面临着同样的问题。看起来很难看,但实际上很有效。不过,最好的选择是改变Hibernate的命名策略,@see