映射LOB对象在Hibernate中有一个固定的模式,就是使用大对象代理。模式都是一样的,映射Lob对象只需要在属性上注解@Lob
.
经常网站上需要存储图片或者长消息,会使用Blob和Clob这两个对象,一个是二进制的,一个是字符序列。下面存储用户资料的头像实体@User中
@Entity
public class User{
@Id
private long id;
@Lob
private Clob profileImage;
}
读写Lob
//读
session.doWork(connection->{
User.setProfileImage(ClobProxy.generateProxy(image));
});
entityManager.persist(user);
//写
User user=entityManager.find(User.class,userid);
Reader reader=user.getProfileImage().getCharactorStream();
上面的对于Clob,Blob代码我敲一个,以后备用:
//读
session.doWork(connection->{
User.setProfileImage(BlobProxy.generateProxy(image));
});
entityManager.persist(user);
//写
User user=entityManager.find(User.class,userid);
InputStream stream=user.getProfileImage().getBinaryStream();
你会发现就是处理的对象不一样,最终可以转化为我所熟悉的InputStream或Reader对象来处理。另外图片的话,存储它再项目中的相对路径于数据库中也是一个好方法,不过这对于分布式的应用来说不算最佳方法。