用Hibernate更新BLOB的问题?

时间:2010-03-30 10:01:36

标签: hibernate blob

我在使用hibernate更新blob时遇到问题。 (我使用的是Hibernate 3.3.1-GA)

我的模型有这些用于休眠的getter / setter, 即内部我处理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。

2 个答案:

答案 0 :(得分: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 Bredesen his post

答案 1 :(得分:0)

好的,我最终做的是为blob创建一个单独的表,并且通过主对象的任何更新,它将删除并在单独的表中创建新条目。 (因此不进行更新)

不理想,但有效。