2010-08-20 98 views
12

我有一个oracle表,它包含几个列的char(n)类型。我使用hibernate工具来创建实体对象,并使用此工具在String中映射char类型。Oracle Char类型和休眠

但是当我部署我的应用程序,我得到一个错误,因为Hibernate等待VARCHAR2类型,而不是一个char类型:

Wrong column type in ARBOR.CMF for column CHG_WHO. Found: char, expected: varchar2(30 char) 

我必须使用哪种类型的Java类型的映射CHAR(n)的输入一个实体?

谢谢。

回答

18

这里有on this blog entry.

从本质上讲,你需要让你的H​​ibernate配置更具体的一些有用的信息,因为它是假设默认字符串映射为VARCHAR2(30)。

您可以尝试使用@Column(length = N)的数据库不可知注释(其中N是数据库中列的实际长度)。如果这不起作用,请尝试使用@Column(columnDefinition =“char”)方法。

+0

非常感谢,我没有看到这个属性:) – Kiva 2010-08-20 10:20:39

+1

我不想为每列做这个。有没有什么办法可以为hibernate设置一些映射。 – yousafsajjad 2015-04-28 22:00:08

+0

@stark它不能解决问题 – 2015-08-10 14:24:39

2

不行的 - 失败休眠模式验证:

@Column(name="ENABLED_FLAG", length=1) 
private String enabledFlag; 

没有工作,因为columnDefinition属性告诉Hibernate不要默认VARCHAR2作为列类型,并使用CHAR代替:

@Column(name="ENABLED_FLAG", length=1, columnDefinition="CHAR") 
private String enabledFlag; 

在数据库中的列定义为:

ENABLED_FLAG CHAR(1 BYTE)