@Entity
public class User implements FieldHandled {
@Id
private String uid;
private String uname;
private int age;
@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] img;
private FieldHandler fieldHandler;
public User() {
}
// getter() and setter() of uid, uname, age
public byte[] getImg() {
// if User user = new User() then fieldHandler is null
// if User user = entityManager.find(User.class, "001") then fieldHandler is not null
if(img != null) {
return img;
}
if (fieldHandler != null) {
return (byte[]) fieldHandler.readObject(this, "img", img);
} else {
return null;
}
}
public void setImg(byte[] img) {
this.img = img;
}
public void setFieldHandler(FieldHandler fieldHandler) {
this.fieldHandler = fieldHandler;
}
public FieldHandler getFieldHandler() {
return fieldHandler;
}
}
我用Hibernate4 h2database.I相信懒加载可以通过我的代码工作正常。
休眠:select user0_.uid as uid1_0_0_, user0_.age as age2_0_0_, user0_.uname as uname4_0_0_ from User user0_ where user0_.uid=?
休眠:select user_.img as img3_0_ from User user_ where user_.uid=?
如果使用repository.save(User)
添加新的用户将被确定,但更新用户将抛出一个异常
java.lang.ClassCastException: org.hibernate.bytecode.instrumentation.spi.LazyPropertyInitializer$1 cannot be cast to java.sql.Blob
我建议使用repository.delete(userid)
之前repository.save
在一个事务中,那么它会正常工作。
不正确,LOB可以延迟加载。请参阅hibernate-annotations文档的第2.2.2.1节:http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#d0e342 - 特别是该示例的'detailedComment'属性,以及它下面的注释。 – Cowan 2010-01-22 02:30:07