映射Blob和Clob类型@Lob

本文介绍如何在数据库中使用@Lob注解存储Blob和Clob类型的大对象数据,包括图片和长文本,并提供了一段示例代码说明如何在实体类中定义这些类型的数据。

通常,可以在数据库中保存诸如图片,长文本类型的数据。这种类型的数据一般是保存成 Blob Clob 类型。

这两种类型的数据可以通过使用 @Lob 属性来标注。例如 CustomerEO 实体增加了一个属性 portrait ,用于保存客户的头像图片,增加了一个属性 meno ,用于保存一些长文本的备注信息。代码如下所示。

@Entity

@Table(name = "customer")

public class CustomerEO implements java.io.Serializable {

         ……

         private byte[] portrait;

 

         @Lob

         @Basic(fetch=FetchType.LAZY)

         public byte[] getPortrait() {

                   return portrait;

         }

 

         public void setPortrait(byte[] portrait) {

                   this.portrait = portrait;

         }

         private String meno;

 

         @Lob

         @Basic(fetch=FetchType.LAZY)

         public String getMeno() {

                   return meno;

         }

 

         public void setMeno(String meno) {

                   this.meno = meno;

         }

        

}

其中加粗的部分为对应的字节流属性所对应字段的定义。这样标注实体后,相对应创建表的 SQL 脚本为以下所示。

CREATE TABLE  customer (

  id int(20) NOT NULL,

  name varchar(255) default NULL,

  short_name varchar(255) default NULL,

  portrait blob,

meno clob,

  PRIMARY KEY  (id)

)

在使用 @Lob 注释注意以下几个问题

l          @Lob 适用于标注字段类型为 Clob Blob 类型。

l          Clob Character Large Ojects )类型是长字符串类型,映射为实体中的类型可为 char[] Character[] 、或者 String 类型。

l          Blob Binary Large Objects )类型是字节类型,映射为实体中的类型可为 byte[] Byte[] 、或者实现了 Serializable 接口的类。

l          因为这两种类型的数据一般占用的内存空间比较大,所以通常使用惰性加载的方式,所以一般都要与 @ Basic 标记同时使用,设置加载方式为 FetchType.LAZY

@Basic(fetch=FetchType.LAZY)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值