一个实体,就是一个持久化的领域对象。通常情况下,一个实体代表在关系数据库中的一张表,实体的一个实例对应于表中的一行。
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 }