详细介绍 javax.persistence 下面的 Entity 中常用的注解.
虽然 Spring Data JPA 已经帮我们对数据的操作封装得很好了, 约定大于配置思想, 帮我们默认了很多东西. JPA(Java 持久性 API)是存储业务实体关联的实体来源. 它显示了如何定义一个面向普通 Java 对象 (POJO) 作为一个实体, 以及如何与管理关系实体提供一套标准. 因此, javax.persistence 下面的有些注解还是必须要去了解的, 以便于更好地提高工作效率.
1. 基本注解
基本注解包括 @Entity,@Table,@Id,@IdClass,@GeneratedValue,@Basic,@Transient,@Column,@Temporal,@Enumerated,@Lob
[email protected]
@Entity 定义对象将会成为被 JPA 管理的实体, 将映射到指定的数据库表.
[email protected]
@Table 指定数据库的表名.
[email protected]
@Id 定义属性为数据库的主键, 一个实体里面必须有一个.
[email protected]
@IdClass 利用外部类的联合主键.
作为符合主键类, 要满足以下几点要求.
必须实现 Serializable 接口.
必须有默认的 public 无参数的构造方法.
必须覆盖 equals 和 hashCode 方法. equals 方法用于判断两个对象是否相同, EntityManger 通过 find 方法来查找 Entity 时是根据 equals 的返回值来判断的. 在本例中, 只有对象的 name 和 email 值完全相同或同一个对象时才返回 true, 否则返回 false.hashCode 方法返回当前对象的哈希码, 生成的 hashCode 相同的概率越小越好, 算法可以进行优化
1.5 @GeneratedValue
@GeneratedValue 为主键生成策略
GenerationType 一共有以下 4 个值:
1.6 @Basic
@Basic 表示属性是到数据库表的字段的映射. 如果实体的字段上没有任何注解, 默认即为 @Basic.
1.7 @Transient
@Transient 表示该属性并非一个到数据库表的字段的映射, 表示非持久化属性, 与 @Basic 作用相反. JPA 映射数据库的时候忽略它.
1.8 @Column
@Column 定义该属性对应数据库中的列名
[email protected]
@Temporal 用来设置 Date 类型的属性映射到对应精度的字段.
(1)@Temporal(TemporalType.DATE)映射为日期∥date(只有日期)
(2)@Temporal(TemporalType.TIME)映射为日期∥time(只有时间).
(3)@Temporal(TemporalType.TIMESTAMP)映射为日期∥datetime(日期 + 时间).
[email protected]
直接映射 enum 枚举类型的字段
[email protected]
@Lob 将属性映射成数据库支持的大对象类型, 支持以下两种数据库类型的字段.
(1)Clob(Character Large Ojects)类型是长字符串类型, java.sql.Clob,Character[],char[]和 String 将被映射为 Clob 类型.
(2)Blob(Binary Large Objects)类型是字节类型, java.sql.Blob,Byte[],byte[]和实现了 Serializable 接口的类型将被映射为 Blob 类型.
(3)Clob,Blob 占用内存空间较大, 一般配合 @Basic(fetch=FetchType.LAZY)将其设置为延迟加载.
2. 关联关系注解
关联关系注解包括 @JoinColumn,@OneToOne,@OneToMany,@ManyToOne,@ManyToMany,@JoinTable,@OrderBy.
2.1@JoinColumn 定义外键关联的字段名称
用法:@JoinColumn 主要配合 @OneToOne,@ManyToOne,@OneToMany 一起使用, 单独使用没有意义.
@JoinColumns 定义多个字段的关联关系.
2.2 @OneToOne 关联关系
用法:@OneToOne 需要配合 @JoinColumn 一起使用. 注意: 可以双向关联, 也可以只配置一方, 需要视实际需求而定.
来源: http://www.bubuko.com/infodetail-3106307.html