@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;
}
}
utilizo Hibernate4 h2database.I estoy seguro de carga lenta puede funcionar bien por mi código.
Hibernate: 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=?
Hibernate: select user_.img as img3_0_ from User user_ where user_.uid=?
si el uso repository.save(User)
para añadir un nuevo usuario va a estar bien, pero actualizar un usuario va a lanzar una excepción
java.lang.ClassCastException: org.hibernate.bytecode.instrumentation.spi.LazyPropertyInitializer$1 cannot be cast to java.sql.Blob
que sugieren el uso repository.delete(userid)
antes de repository.save
en una transaccional, entonces funcionará bien.
No es cierto, los LOB pueden cargarse vagamente. Consulte la Sección 2.2.2.1 de la documentación de anotaciones de hibernación: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#d0e342 - específicamente la propiedad 'detailedComment' en ese ejemplo y la nota debajo. – Cowan