2008-09-10 82 views
1

我有兩個表之間的一對多關係。許多表包含clob列。在CLOB列看起來像這樣處於休眠:休眠作物clob值奇怪

@CollectionOfElements(fetch = EAGER) 
@JoinTable(name = NOTE_JOIN_TABLE, joinColumns = @JoinColumn(name = "note")) 
@Column(name = "substitution") 
@IndexColumn(name = "listIndex", base = 0) 
@Lob 
private List<String> substitutions; 

所以基本上我可以有一些subsitutions一張紙條,說"foo""fizzbuzz"。所以在我的主表中,我可以用id爲4的註釋,在我的NOTE_JOIN_TABLE中,我將有兩行,即"foo""fizzbuzz",它們都與註釋有關係。

但是,當其中一個插入到DB 中時,較大的替代值被裁剪的時間與最短的一樣長。所以在這種情況下,我會在數據庫中有"foo""fiz"而不是"foo""fizzbuzz"

你知道爲什麼會發生這種情況嗎?我已經檢查並確認他們沒有在我們的代碼中的任何地方被裁剪,它是明確的冬眠。

回答

0

許多JDBC驅動程序,特別是Oracle的早期版本,在插入LOB時遇到問題。你確定Hibernate的查詢是否觸發了,並且在你的JDBC驅動程序中綁定了相同的參數?

0

LOB/CLOB列可能不夠大。對於LOB/CLOB,Hibernate有一些相對較小的缺省列大小(可能取決於db)。無論如何,嘗試這樣的:

@Lob 
@Column(length=2147483648) 

根據您的需要調整長度(以字節爲單位)。

+0

我不認爲這可能是因爲它是基於列表中最大字符串的動態裁剪而不是靜態截點。 – SCdF 2008-09-10 03:56:52

+0

啊,我明白了。很奇怪的問題。 「筆記」的連接列是實際筆記ID還是實際筆記? – Todd 2008-09-10 04:09:00