JPA学习---第六节:大数据字段映射与字段延迟加载

1、大数据字段所需的注解 @Lob ,例如:

@Lob
private String info;

在mysql中映射产生的字段的类型是longtext;在oracle中是  CLOB

@Lob
private Byte[] bytes;

mysql中对应longblob;oracle中不能使用byte[]字段加@Lob的方式直接映射

2、大数据字段最好是延迟加载,字段延迟加载时时,如果没有访问字段所对应的属性方法(getXX())时,就不会将大数据字段中的数据加载到内存当中,这样可以节约内存。延迟加载注解:

    @Basic(fetch=FetchType.LAZY)
    private Byte[] bytes;

代码如下:

package learn.jpa.bean;

import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name="t_person")
public class Person {

    @Id                //@Id用于标记属性的主键
    @GeneratedValue
    private Integer id;
    @Column(length=64,name="personName",nullable=false)
    private String name;
    // TemporalType.DATE 表示日期格式 例:2014-10-01
    // TemporalType.TIME 表示时间格式  例:12:21:34
    // TemporalType.TIMESTAMP 表示日期加时间格式  例:2014-10-01 12:21:34
    @Temporal(TemporalType.DATE)
    private Date brithday;
    // @Enumerated 注解枚举型   
    // EnumType.STRING 表示保存到数据库的值是 MAN or WOMEN
    // EnumType.ORDINAL 表示保存到数据库的值是 MAN 和 WOMEN 所设置的索引值
    @Enumerated(EnumType.STRING)
    @Column(length=5, nullable=false)
    private Gender gender;
    // @Lob 字段需要存放大的文本数据
    @Lob
    private String info;
    // 存放二进制数据 
    // FetchType.LAZY 表示延迟加载  当不访问字段所对应的属性方法时,就不会从数据库中获取数据装载到内存中
    // FetchType.EAGER 表示立刻加载
    @Basic(fetch=FetchType.LAZY)
    @Lob
    private Byte[] bytes;
    // @Transient 说明 imagepath 字段所对应的属性不作为持久化字段,
    // 也就是说不和数据库中的某个字段关系映射
    @Transient
    private String imagepath;
    
    public Person(){}
    
    public Person(String name){
        this.name = name;
    }
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Date getBrithday() {
        return brithday;
    }

    public void setBrithday(Date brithday) {
        this.brithday = brithday;
    }

    public Gender getGender() {
        return gender;
    }

    public void setGender(Gender gender) {
        this.gender = gender;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public Byte[] getBytes() {
        return bytes;
    }

    public void setBytes(Byte[] bytes) {
        this.bytes = bytes;
    }

    public String getImagepath() {
        return imagepath;
    }

    public void setImagepath(String imagepath) {
        this.imagepath = imagepath;
    }
    
}
原文地址:https://www.cnblogs.com/hwlsniper/p/4082283.html