我有一個Java類,像這樣如何使用Hibernate持久化Object類型的Java屬性?
private Object myObj;
一個屬性當我嘗試使用Hibernate註釋保存類,我得到了相當混亂的錯誤消息「屬性映射有錯誤的列數」。
什麼是正確的方法來堅持一個包含這樣的通用屬性的類?
我有一個Java類,像這樣如何使用Hibernate持久化Object類型的Java屬性?
private Object myObj;
一個屬性當我嘗試使用Hibernate註釋保存類,我得到了相當混亂的錯誤消息「屬性映射有錯誤的列數」。
什麼是正確的方法來堅持一個包含這樣的通用屬性的類?
如果可以提供幫助,請勿使用通用對象屬性。我與Hibernate的第一筆意味着繼承一個像這樣的東西的項目,這是一個痛苦的世界。正如Zoidberg所說,使用Object意味着你的模型不容易被序列化/版本化(如果我誠實的話,這是輕描淡寫)。
正如您所說,該對象可以是圖像,視頻等。
如果它應該只有二進制數據,您可以創建另一個類,並從這個傳送數據。在傳輸過程中,您可以將Object
轉換爲byte[]
(具體取決於具體類型),並使用Lob數據類型(@Lob
)進行映射。
爲了擴大這一點,如果不僅二進制數據是要支持,新的對象可以有2場 - 一個二進制的情況下,和其他類型的情況下,一個(或多個)。
無論如何,對象現在,代表了相當愚蠢的設計,它不能被毫不費力正確堅持。
改變你的屬性的類型:
private byte[] myObj;
這(在C#雖然)工作對我來說與功能NHibernate和VARBINARY(最大值)的SQL字段類型。
然後,您可以將其公開爲圖像,視頻或其他內容。在Java中轉換爲圖像的一個例子:
ImageIO.read(new ByteArrayInputStream(myObj));
我所知道的唯一途徑是系列化的,我不建議這樣做。每次編譯應用程序時,數據庫中對象的seralized版本可能會過時並且無法檢索。 – Zoidberg 2009-12-21 16:42:53
一個問題是:什麼迫使你使用Object作爲這個特定領域的類型?難道你不能使用更具體的類型嗎? – Romain 2009-12-21 16:50:07
@afielden:你想如何工作?就數據庫而言,最理想的結果是什麼? – skaffman 2009-12-21 16:52:58