2010-03-30 80 views
1

我遇到了用hibernate更新blob的問題。 (我使用Hibernate 3.3.1-GA)用Hibernate更新BLOB時出現問題?

我的模型有這些getter/setter方法對Hibernate, 即內部我處理的byte []所以任何的getter/setter轉換 的byte []博客。

我可以創建一個沒有問題的初始對象,但如果我嘗試更改blob的內容,數據庫列不會更新。我沒有收到任何錯誤信息,除非數據庫未更新,否則一切都很正常。

/** do not use, for hibernate only */ 
public Blob getLogoBinaryBlob() { 
    if(logoBinary == null){ 
     return null; 
    } 
    return Hibernate.createBlob(logoBinary); 
} 

/** do not use, for hibernate only */ 
public void setLogoBinaryBlob(Blob logoBinaryBlob) { 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    try { 
     logoBinary = toByteArrayImpl(logoBinaryBlob, baos); 
    } catch (Exception e) { 
    } 
    } 

我對BLOB Hibernate映射看起來像

<property name="logoBinaryBlob" column="LOGO_BINARY" type="blob" /> 

使用的數據庫是Oracle。

+0

您的屬性是使用JPA還是舊式hibernate屬性映射映射的(例如,)。你也使用哪種版本的Hibernate? – 2010-03-30 10:12:23

+0

包括映射和版本(見上文),謝謝。 – JohnSmith 2010-03-30 10:42:37

+0

hm,我用 getHibernateTemplate()。merge(object); 更新條目。 當閱讀這篇文章:https://forum.hibernate.org/viewtopic.php?f=1&t=942365&start=0 它聽起來像合併是不可能用於blobs模型...任何解決方法? – JohnSmith 2010-03-30 12:10:25

回答

0

好吧,我最終做的是爲blob創建一個單獨的表,並且通過主對象的任何更新,它將刪除並在單獨的表中創建新條目。 (因此沒有更新)

不理想,但它的工作原理。

2

哇,我終於能夠找到使用Hibernate更新BLOB數據的解決方案。


session.merge(domain); // changes blob value to 44 

它更改爲這能解決問題:

Domain merged = (Domain) session.merge(domain); 
merged.setBlob(Hibernate.createBlob(domain.getBlob().getBinaryStream())); 

感謝Chris佈雷德森對his post

相關問題