我正在尝试在带有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
然后我的列名和表名会自动引用,但名称仍然会小写。
答案 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匹配的子类。您是否尝试过其中一个子类来查看它是否有任何区别?