2010-08-20 82 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)