如何告诉Hibernate注释@Column区分大小写?

时间:2014-03-19 12:19:47

标签: java hibernate jpa annotations sybase

我正在尝试在带有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

然后我的列名和表名会自动引用,但名称仍然会小写。

4 个答案:

答案 0 :(得分:1)

试试这个:

@Table(name="`ECM`")?

中使用反引号

这必须从Hibernate点开始。如果没有那么问题应该在DB中(如果我没错)

答案 1 :(得分:1)

我想我有你的答案:

基本上,您需要更改JPA提供程序的命名策略。如何执行此操作取决于您如何设置项目。

在我的例子中,使用spring boot数据我在application.properties中设置了一个属性

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy

如果没有您的详细信息,我无法详细说明如何执行此操作。

答案 2 :(得分:1)

我的目标有点不同,因为尝试创建表大写,而hibernate以小写形式创建它们。我也使用MySQL而不是Sybase。 但对我来说引用这样的名字是有效的:

@Entity
@Table(name="\"ECM\"")
public class RelationshipDbo {
    ...
}

然后表格被创建为大写。也许这对查询也有帮助。

答案 3 :(得分:0)

您的Sybase db版本是什么? 在Hibernate 3.5中已经弃用了SybaseDialect,然后在Hibernate 4.1之后重构了一堆与不同版本的Sybase匹配的子类。您是否尝试过其中一个子类来查看它是否有任何区别?

  • org.hibernate.dialect.Sybase11Dialect
  • org.hibernate.dialect.SybaseAnywhereDialect
  • org.hibernate.dialect.SybaseASE15Dialect