• JPA的实体


      一个实体,就是一个持久化的领域对象。通常情况下,一个实体代表在关系数据库中的一张表,实体的一个实例对应于表中的一行。

      JPA规范对实体的要求:

      1、实体类必须使用javax.persistence.Entity进行注解(@Entity)。

      2、实体类必须要有一个公共的或者受保护的空参构造方法。

      3、实体类不能声明为final,方法和需要持久化的属性也不能声明为final。

      4、如果游离态的实体对象需要以值的方式进行传递,则必须实现Serializable接口。

      5、实体类可以继承实体类和非实体类,非实体类也可以继承实体类。

      6、持久化实例变量必须被声明为私有的、受保护的或者私有包,只能直接访问实体类的方法。

      JAP实体类常用的注解:

      1、@Entity 将领域对象标注为一个实体,表示需要保存到数据库中。

      2、@Table @Table(name="table_name")用name属性指定对应的表。

      3、@Id 表示对应的字段是表的主键。

      4、@GeneratedValue 主键的产生策略。

      5、@Column @Column(name="col_name",nullable=true,length=32)用name属性指定对应表中的列名,nullable指定是否可以为空,length指定列的长度。

      6、@Temporal  @Temporal(TemporalType.Date)指定时间类型,数据库对时间的类型有严格的划分。

      7、@Version “提交版本必须大于记录当前版本才能执行更新”的乐观锁策略。

      8、@Transient 让变量不要持久化到数据库中

      9、@Enumerated 使用枚举。@Enumerated(EnumType.STRING)表示使用枚举的值,@Enumerated(EnumType.ORDINAL)表示使用枚举值的索引。   

        10、@Lob 处理大文本和二进制数据。

      一个实体例子: 

      

      1 package com.cndatacom.jpa.entity;
      2 
      3 import java.io.Serializable;
      4 import java.sql.Timestamp;
      5 import java.util.Date;
      6 
      7 import javax.persistence.Basic;
      8 import javax.persistence.Column;
      9 import javax.persistence.Entity;
     10 import javax.persistence.EnumType;
     11 import javax.persistence.Enumerated;
     12 import javax.persistence.FetchType;
     13 import javax.persistence.GeneratedValue;
     14 import javax.persistence.GenerationType;
     15 import javax.persistence.Id;
     16 import javax.persistence.Lob;
     17 import javax.persistence.Table;
     18 import javax.persistence.Temporal;
     19 import javax.persistence.TemporalType;
     20 import javax.persistence.Transient;
     21 import javax.persistence.Version;
     22 
     23 
     24 /**
     25  * @author Luxh
     26  */
     27 
     28 @Entity//标识为持久化实体对象
     29 @Table(name="t_employee")//指定表名
     30 public class Employee implements Serializable {
     31 
     32     private static final long serialVersionUID = -6143714081018642099L;
     33     
     34     @Id
     35     @GeneratedValue(strategy=GenerationType.AUTO)
     36     //@GeneratedValue(strategy=GenerationType.IDENTITY)
     37     //@GeneratedValue(strategy=GenerationType.SEQUENCE)
     38     //@GeneratedValue(strategy=GenerationType.TABLE)
     39     private Long id;
     40     
     41     @Column(name="name",length=100)//指定列名、列的长度
     42     private String name;
     43     
     44     @Temporal(TemporalType.DATE)//指定时间格式类型
     45     private Date createTime;
     46     
     47     @Version//乐观锁
     48     @Column(name="optlock")
     49     private Timestamp version;
     50     
     51     @Transient//让变量不要持久化到数据库中
     52     private String temp;
     53     
     54     @Enumerated(EnumType.STRING)//使用枚举
     55     @Column(name="gender",length=6,nullable=false)
     56     private Gender gender = Gender.MALE;//默认值为MALE
     57     
     58     @Lob//大文本
     59     private String instruction;
     60     
     61     @Lob//二进制数据
     62     @Basic(fetch=FetchType.LAZY)//延迟加载,用到的时候才从数据库加载
     63     private Byte[] files;
     64     
     65 
     66     public Gender getGender() {
     67         return gender;
     68     }
     69 
     70     public void setGender(Gender gender) {
     71         this.gender = gender;
     72     }
     73 
     74     public String getInstruction() {
     75         return instruction;
     76     }
     77 
     78     public void setInstruction(String instruction) {
     79         this.instruction = instruction;
     80     }
     81 
     82     public Byte[] getFiles() {
     83         return files;
     84     }
     85 
     86     public void setFiles(Byte[] files) {
     87         this.files = files;
     88     }
     89 
     90     public Long getId() {
     91         return id;
     92     }
     93 
     94     public void setId(Long id) {
     95         this.id = id;
     96     }
     97 
     98     public String getName() {
     99         return name;
    100     }
    101 
    102     public void setName(String name) {
    103         this.name = name;
    104     }
    105 
    106     public Date getCreateTime() {
    107         return createTime;
    108     }
    109 
    110     public void setCreateTime(Date createTime) {
    111         this.createTime = createTime;
    112     }
    113 
    114     public Timestamp getVersion() {
    115         return version;
    116     }
    117 
    118     public void setVersion(Timestamp version) {
    119         this.version = version;
    120     }
    121 
    122     public String getTemp() {
    123         return temp;
    124     }
    125 
    126     public void setTemp(String temp) {
    127         this.temp = temp;
    128     }
    129 
    130 }


      枚举Gender:

      

    1 /**
    2  * 性别
    3  * @author Luxh
    4  */
    5 public enum Gender {
    6     MALE,FEMALE
    7 }

      

  • 相关阅读:
    laravel安装
    redis缓存设置和读取
    window下装redis扩展(以php5.5为例)
    静态缓存
    原生js发送ajax请求
    数据库查询语句面试
    Cookie与Session
    面试题-一个for循环输出一个棱形
    编程题:利用for循环打印 9*9 表?
    java面试题之分析(二)
  • 原文地址:https://www.cnblogs.com/luxh/p/2517228.html
Copyright © 2020-2023  润新知