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