2010-04-22 106 views
1

使用Hibernate 3.3.1和Hibernate標註3.4,數據庫是DB2/400 V6R1,運行在WebSphere 7.0.0.9爲什麼Hibernates會忽略@Column註釋的名稱屬性?

我有下面的類

@Entity 
public class Ciinvhd implements Serializable { 


    @Id 
    private String ihinse; 

    @Id 
    @Column(name="IHINV#") 
    private BigDecimal ihinv; 

.... 

} 

至於原因,我想不通,休眠忽略指定的列名,而使用「ihinv」生成SQL:

select 
     ciinvhd0_.ihinse as ihinse13_, 
     ciinvhd0_.ihinv as ihinv13_, 
... 

這當然給了我以下錯誤:

Column IHINV not in table CIINVHD 

編輯:我將hibernate的日誌級別切換到DEBUG,我看到它不處理該字段的列註釋。嘗試了幾個隨機的東西,它只是不起作用。

以前有沒有人有過這個問題?我有其他的實體非常相似,他們在他們的數據庫字段名稱中使用#並且是PK的一部分,我沒有這個問題。

+1

在列名中使用散列是否合法?這是什麼數據庫? – cletus 2010-04-22 15:05:03

+0

@cletus - 問題是數據庫是DB2/400。 – jsight 2010-04-22 15:09:22

+0

@cletus - DB2/400,是的,它是合法的。 – svachon 2010-04-22 15:24:55

回答

0

我懷疑問題是列名中的散列。 A similar question on the hibernate forums表明反引號在這裏很有用。

+0

當你切換到一個不支持散列符號的方言時,這個問題就出現了。哈希符號在我的數據庫中的許多其他表中使用,我從來沒有任何問題。這張桌子真的有麻煩了。我可能會面臨一個冬眠的bug。感謝您的幫助。 – svachon 2010-04-23 12:36:44

+0

@svachon - 其他字段是否具有相同類型的散列(即BigDecimal)?也許你在hibernate中遇到了一個特定於它的處理類型的bug? – jsight 2010-04-23 15:35:11

+0

是的,還有其他類型的哈希類型爲BigDecimal。而且我還有其他有散列和BigDecimal的工作實體。 – svachon 2010-04-26 18:07:16

2

你可以嘗試某種引用的:

例如:

@Column(name="`IHINV#`") 

@Column(name="'IHINV#'") 

另一種選擇是在挖源代碼Hibernate dialect for DB2,看看它是否包含任何有用的。

當然,最簡單的方法是在可能的情況下從列名移除哈希。

+0

感謝您的建議,但這不適合我。 – svachon 2010-04-22 18:04:40