孙卫琴的《精通JPA与Hibernate》的读书笔记:通过JPA处理Blob和Clob类型的数据

这篇博客详细介绍了如何在JPA和Hibernate中处理Blob和Clob类型的数据。通过Java.sql.Blob和Java.sql.Clob接口,以及Hibernate的LobHelper,讨论了数据的逻辑指针和实际读取过程。文中还展示了如何在持久化类中映射这些大对象,并提供了示例代码,包括使用@Lob注解的方式。
摘要由CSDN通过智能技术生成

在持久化类中,二进制大对象可以声明为byte[]或java.sql.Blob类型;字符串大对象可以声明为java.lang.String或java.sql.Clob类型。

java.sql.Blob和java.sql.Clob是JDBC API中的接口。在默认情况下,Blob和Clob接口的实现会使用SQL定位器,这意味着当程序从数据库加载Blob类型或Clob类型的数据时,实际上加载的仅是Blob类型或Clob类型的数据的逻辑指针。接下来程序需要通过Blob.getBinaryStream()或Clob.getCharacterStream()方法得到Blob或Clob类型的数据的输入流,才可以真正读取到大对象数据。

对于以下程序代码:

Customer customer=entityManager.find(Customer.class, 
                                     Long.valueOf(1); //第1行
Blob image=customer.getImage();  //第2行
InputStream in=image.getBinaryStream();  //第3行

第2行的image变量引用的只是数据库中Blob类型的数据的逻辑指针。第3行通过image.getBinaryStream()方法得到Blob类型的数据的输入流,才可以真正读取到数据库中的大对象数据。

org.hibernate.LobHelper接口提供了一系列用于创建Blob和Clob对象的方法:

  • public Blob createBlob(byte[] bytes)
  • public Blob createBlob(InputStream stream, long length)
  • public Clob createClob(String string)
  • public Clob createClob(Reader reader, long length)

Hibernate的Session接口的getLobHelper()方法返回一个LobHelper对象。

假定Customer类的image属性为java.sql.Blob类型,在MySQL数据库中CUSTOMERS表的IMAGE字段为BLOB类型。在Customer类中,映射image属性的代码如下:

@Column(name="IMAGE")
@Type(type="blob")
private Blob image;

此外,JPA API还提供了一个@Lob注解,用来映射Blob或Clob类型的属性。因此,也可以用@Lob注解来映射image属性:

@Column(name="IMAGE
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙卫琴书友会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值