在默认的情况下,Entity中的属性加载方式都是即时加载(EAGER)的,当Entity对象实例化时,就加载了实体中相应的属性值。
但对于一些特殊的属性,比如长文本型text、字节流型blob型的数据,在加载Entity时,这些属性对应的数据量比较大,有时创建实体时如果也加载的话,可能严重造成资源的占用。要想解决这些问题,此时就需要设置实体属性的加载方式为惰性加载(LAZY)。
@Basic标记可以指定实体属性的加载方式,它的定义如下所示。
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface Basic {
FetchType fetch() default EAGER;
boolean optional() default true;
}
l Fetch属性表示获取值的方式,它的值是定义的枚举类型,枚举类型的定义如下。
public enum FetchType { LAZY, EAGER };
有两种加载方式,LAZY和EAGER。LAZY 表示即时加载、EAGER表示惰性加载。默认为即时加载
l 如果属性不使用@Basic标记,属性的加载方式为默认的加载方式,例如不标注@Basic标记的属性设置。
private String name;
@Column(name="CONTACT_EMAIL")
public String getName() {
return name;
}
等价于:
private String name;
@Basic(fetch=FetchType.EAGER)
@Column(name="CONTACT_EMAIL")
public String getName() {
return name;
}
l 属性optional表示属性是否可为null,不能用于Java基本数据类型byte,int,short,long,boolean,char,float,double的使用。
提示:数据加载方式(Fetch Type)不仅在加载实体数据时应用,在加载实体关系的加载中也会使用到,这部分内容将本书后面的章节中做详细的介绍。