2010-03-30 157 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

相关问题