映射Blob和Clob类型@Lob

通常,可以在数据库中保存诸如图片,长文本类型的数据。这种类型的数据一般是保存成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)


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/EJB_JPA/archive/2008/05/09/2422575.aspx

你可能感兴趣的:(sql,.net,脚本,jpa,ejb)