zoukankan      html  css  js  c++  java
  • 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;
        }
        
    }
  • 相关阅读:
    commons-lang3工具类学习(三)
    commons-lang3工具类学习(二)
    commons-lang3工具类学习(一)
    Spring之ClassPathResource加载资源文件
    Spring详解(十)加载配置文件
    java IO流总结
    Spring自定义注解配置切面实现日志记录
    使用@Cacheable 踩过的坑
    将BufferedImage转换为InputStream,亲测可用
    计算两个日期之间间隔的天数
  • 原文地址:https://www.cnblogs.com/hwlsniper/p/4082283.html
Copyright © 2011-2022 走看看