@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