2011-03-07 33 views
2

我使用JPA2與休眠3.6.1。和Derby數據庫和我用於BLOB以下注釋:JPA「不能轉換爲java.sql.Blob」

@Column(length = Integer.MAX_VALUE) 
@Lob 
long[] bucket; 

休眠創建正確BLOB列,但如果我試圖挽救實體,我得到以下異常:

的java.lang .ClassCastException:[J不能轉換爲java.sql.Blob

爲什麼以及如何使這項工作?

如果我在沒有@Lob的情況下對其進行註釋,我會得到一個「位數據的Varchar」列,它最多隻能包含32m。

回答

8

您需要將屬性映射爲byte [],而不是[long]。

documentation

@Lob表示該屬性 應在BLOB被持久或 的Clob取決於屬性類型: java.sql.Clob中,字符[],炭[]和 java.lang.String將會保留在 的Clob中。 java.sql.Blob,Byte [],byte [] 和可序列化類型將保留在Blob中的 。

如果屬性類型實現 了java.io.Serializable並且不是 基本類型,並且如果所述屬性不與 註釋@Lob,則使用 休眠序列化類型。

如果你想持久化數組,你需要構建一個自定義用戶類型來轉換數據類型。你可以在這裏找到一個例子http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#d0e2794

+0

好的,謝謝。有沒有其他的方式來持久[]而不必手動將其轉換爲字節[]或其他東西? – suicide 2011-03-07 16:42:00

+0

請檢查答案,我已經從文檔中添加了一個示例鏈接。 – Augusto 2011-03-07 16:49:07

相關問題