我在使用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。
答案 0 :(得分:2)
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创建一个单独的表,并且通过主对象的任何更新,它将删除并在单独的表中创建新条目。 (因此不进行更新)
不理想,但有效。