2009-12-21 183 views
1

我有一個Java類,像這樣如何使用Hibernate持久化Object類型的Java屬性?

private Object myObj; 

一個屬性當我嘗試使用Hibernate註釋保存類,我得到了相當混亂的錯誤消息「屬性映射有錯誤的列數」。

什麼是正確的方法來堅持一個包含這樣的通用屬性的類?

+1

我所知道的唯一途徑是系列化的,我不建議這樣做。每次編譯應用程序時,數據庫中對象的seralized版本可能會過時並且無法檢索。 – Zoidberg 2009-12-21 16:42:53

+0

一個問題是:什麼迫使你使用Object作爲這個特定領域的類型?難道你不能使用更具體的類型嗎? – Romain 2009-12-21 16:50:07

+2

@afielden:你想如何工作?就數據庫而言,最理想的結果是什麼? – skaffman 2009-12-21 16:52:58

回答

0

如果可以提供幫助,請勿使用通用對象屬性。我與Hibernate的第一筆意味着繼承一個像這樣的東西的項目,這是一個痛苦的世界。正如Zoidberg所說,使用Object意味着你的模型不容易被序列化/版本化(如果我誠實的話,這是輕描淡寫)。

3

正如您所說,該對象可以是圖像,視頻等。

如果它應該只有二進制數據,您可以創建另一個類,並從這個傳送數據。在傳輸過程中,您可以將Object轉換爲byte[](具體取決於具體類型),並使用Lob數據類型(@Lob)進行映射。

爲了擴大這一點,如果不僅二進制數據是要支持,新的對象可以有2場 - 一個二進制的情況下,和其他類型的情況下,一個(或多個)。

無論如何,對象現在,代表了相當愚蠢的設計,它不能被毫不費力正確堅持。

0

改變你的屬性的類型:

private byte[] myObj; 

這(在C#雖然)工作對我來說與功能NHibernate和VARBINARY(最大值)的SQL字段類型。

然後,您可以將其公開爲圖像,視頻或其他內容。在Java中轉換爲圖像的一個例子:

ImageIO.read(new ByteArrayInputStream(myObj)); 
相關問題