zoukankan      html  css  js  c++  java
  • JPA实体类中常用的注解

    这两天在看黎活明老师的JPA的讲解视频,现在只了解这么多,记录备用。

    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.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Lob;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;
    import javax.transaction.Transactional;
    
    @Entity(name = "Student") // @Entity:表明本类是一个JPA实体,name的默认值就是类名。
    @Table(name = "tbl_student") // @Table:指定和数据库中映射表的名称(默认配置好了数据源)。
    public class Student {
    
        private Integer id; // 主键,自增
    
        private String name; // 普通string
    
        private Date birthday; // 日期类型数据(只保存年月日)
    
        private Gender gender; // 枚举类型数据
    
        private String info; // 大文本
    
        private byte[] file; // 二进制文件流
    
        private String imagePath; // 设置这个字段和数据表字段没有映射关系
        
        /*
         * 此处穿插一个问题,什么是属性,什么是字段?
         * 字段:往上看,上面定义的这些都叫字段。
         * 属性:往下看,get方法get后面跟的字符串叫做属性。
         * 
         * 字段和属性有啥区别?
         * 自动生成get/set方法时:属性和字段都可以和数据库表字段映射,此时的属性和字段名是一致的。
         * 当属性和字段名不一致时:只有属性才会和数据库表字段产生映射。
         * 
         * 所以:
         * 使用注解映射属性和数据库表字段的关系时,最好将注解写在get方法上。
         * 若是自动生成的get/set方法,即属性和字段名一致时,注解写在字段上面也是ok的。
         */
    
        @Id // @Id:标识主键
        @GeneratedValue(strategy = GenerationType.AUTO) // @GeneratedValue:指定自增策略,此处写的是默认策略,会根据不同数据库使用相应的自增方式。
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        // @Column:用来指定和数据库表字段的映射,同时可指定数据库中的字段长度,是否唯一,是否可为空等一系列的配置。
        @Column(name = "name", length = 30, unique = true, nullable = false)
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        // @Temporal:指定是日期类型,并且保存格式为年月日(也可以指定为时间或时间戳)。
        @Temporal(TemporalType.DATE)
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        // @Enumerated:指定是枚举类型,保存时保存字符串。若不指定EnumType.STRING,只会保存在枚举中的下标(index)。
        @Enumerated(EnumType.STRING)
        @Column(length = 5)
        public Gender getGender() {
            return gender;
        }
    
        public void setGender(Gender gender) {
            this.gender = gender;
        }
    
        // @Lob:大文本。如不指定@Lob,最多只能保存255个字符。指定@Lob之后可以保存非常大的文本。
        @Lob
        public String getInfo() {
            return info;
        }
    
        public void setInfo(String info) {
            this.info = info;
        }
    
        // @Lob:此处@Lob保存的是字符流。
        @Lob
        @Basic(fetch = FetchType.LAZY) // 此处设置查取对象时延迟加载字符流,避免占用太多的内存。只有用到该属性时,才会去加载。
        public byte[] getFile() {
            return file;
        }
    
        public void setFile(byte[] file) {
            this.file = file;
        }
    
        // @Transactional:用于指定该属性和数据库表没有映射关系。
        @Transactional
        public String getImagePath() {
            return imagePath;
        }
    
        public void setImagePath(String imagePath) {
            this.imagePath = imagePath;
        }
    
    }
    
    /*
     * 测试枚举类型的枚举类
     */
    enum Gender {
        MAN, WOMAN
    }
  • 相关阅读:
    RBO基于规则的优化器access paths优先级
    脚本:监控临时表空间使用率
    脚本:格式化的V$SQL_SHARED_CURSOR报告
    脚本:监控并行进程状态
    Oracle内部错误:ORA00600[25012]一例
    Trace obtained enqueue information by set event 10704
    Script:Translate RDBA relative data block address
    [Repost]List of X$ Tables
    Oracle学习笔记:oem手工管理
    Oracle学习笔记:redo重做日志
  • 原文地址:https://www.cnblogs.com/zj0208/p/6307028.html
Copyright © 2011-2022 走看看