如何告诉 Hibernate 注释 @Column 区分大小写?
Posted
技术标签:
【中文标题】如何告诉 Hibernate 注释 @Column 区分大小写?【英文标题】:How to tell Hibernate annotation @Column to be case-sensitive? 【发布时间】:2014-04-25 16:24:50 【问题描述】:我正在尝试在带有 Hibernate 的 Sybase 数据库上的名为 ECM(大写)的表中执行简单的 SELECT 查询。我以这种方式注释了我的 DBO:
@Entity
@Table(name="ECM")
public class RelationshipDbo
...
但是,我遇到了“table not found”错误:生成的 SQL 的表名是小写的。我无法更改数据库配置以使其不区分大小写。
我也试过这样引用:
@Table(name="`ECM`")
还有这个:
@Table(name="'ECM'")
结果:在查询中添加了引号,但表名仍然从大写转换为小写。
技术资料:
Hibernate 4.3
JPA 1.2
org.hibernate.dialect.SybaseDialect
你们有什么想法吗?
编辑:也试过这个Hibernate changes @Table(name) to lowercase
然后我的列名和表名被自动引用,但名称仍然小写。
【问题讨论】:
嗨@Deathtiny,你能找到这个问题的解决方案吗,我也面临同样的问题。 【参考方案1】:试试这个:
像@Table(name="`ECM`")?
一样使用反引号
这必须从休眠点开始工作。如果不是,那么问题应该出在数据库中(如果我没记错的话)
【讨论】:
已经测试过了,但不成功,如我的帖子中所述。问题是,即使引用,ECM 字母由于某种原因被小写。【参考方案2】:我想我有你的答案:
基本上,您需要更改 JPA 提供者的命名策略。您如何执行此操作将取决于您如何设置项目。
在我的例子中,我使用 spring boot 数据在我的 application.properties 中设置了一个属性
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy
如果没有您提供更多详细信息,我无法提供有关如何执行此操作的更多细节。
【讨论】:
【参考方案3】:我的目标有点不同,因为我试图创建大写的表,而 hibernate 以小写创建它们。另外我使用的是 mysql 而不是 Sybase。 但对我来说,引用这样的名字是可行的:
@Entity
@Table(name="\"ECM\"")
public class RelationshipDbo
...
然后表被创建为大写。也许这对查询也有帮助。
【讨论】:
看起来很难看,但确实有效。然而,最好的选择是改变 Hibernate 的命名策略,@see ***.com/a/39194169/956727【参考方案4】:您的 Sybase 数据库版本是多少?
SybaseDialect
在 Hibernate 3.5 中已被弃用,然后从 Hibernate 4.1 开始重构,其中包含一堆匹配不同版本的 Sybase 的子类。您是否尝试过其中一个子类,看看它是否有任何不同?
【讨论】:
谢谢,尝试了三种可能的方言,但生成的 SQL 保持不变:我的表名总是小写.. 奇怪。我通过在现有项目中切换到 SybaseDialect 进行了快速测试(使用 H2 in-mem db),我的 SQL 输出中的情况是正确的。我在配置中看到的主要区别是我使用的是 JPA 2.1。不确定这是否会有所不同。以上是关于如何告诉 Hibernate 注释 @Column 区分大小写?的主要内容,如果未能解决你的问题,请参考以下文章
[ SSH框架 ] Hibernate框架学习之四(JPA)
当 bean 类与一对多注释链接时,使用 hibernate 在 db 上选择查询: