介绍javax.persistence下面的Entity中常用的注解。
虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定了大概配置思想,帮我们默认了很多东西。
JPA(Java持久性API)是存储业务实体关联的实体来源。它显示了如何定义一个面向普通Java对象(POJO)作为一个实体,以及如何与管理关系实体提供一套标准。因此,javax.persistence下面的有些注解还是必须要去了解的,以便于更好地提高工作效率。
基本注解包括@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、@Enumerated、@Lob
@Entity定义对象将会成为被JPA管理的实体,将映射到指定的数据库表。
@Table指定数据库的表名。
@Id定义属性为数据库的主键,一个实体里面必须有一个。
@IdClass利用外部类的联合主键。
作为符合主键类,要满足以下几点要求。
equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity时是根据equals的返回值来判断的。
@GeneratedValue为主键生成策略
GenerationType一共有以下4个值:
public enum GenerationType( //通过表产生主键,框架由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植 TABLE, //通过序列产生主键,通过@Sequence Generator注解指定序列名,MySQL数据库不支持这种方式 SEQUENCE, //采用数据库ID自增长,一般用于MySQL IDENTITY, //JPA自动选择合适的策略,是默认选项 AUTO )
@Basic表示属性是到数据库表的字段的映射。如果实体的字段上没有任何注解,默认即为@Basic。
@Transient表示该属性并非一个到数据库表的字段的映射,表示非持久化属性,与@Basic作用相反。JPA映射数据库的时候忽略它。
@Column定义该属性对应数据库中的列名
@Temporal用来设置Date类型的属性映射到对应精度的字段。
直接映射enum枚举类型的字段
有一个枚举类,用户的性别
public enum Gender{ //实体类@Enumerated的写法如下 MAIL(”男性”),FMAIL(”女性”); private String value; private Gender(String value){ this.value =value; } } @Entity @Table(name=”tbuser”) public class User implements Serializable{ @Enumerated(EnumType.STRING) @Column(name = ”user_gender”) private Gender gender; ....... }
@Lob 将属性映射成数据库支持的大对象类型,支持以下两种数据库类型的字段。
关联关系注解包括@JoinColumn、@OneToOne、@OneToMany、@ManyToOne、@ManyToMany、@JoinTable、@OrderBy。
用法:@JoinColumn主要配合@OneToOne、@ManyToOne、@OneToMany一起使用,单独使用没有意义。
@JoinColumns定义多个字段的关联关系。
用法:@OneToOne需要配合@JoinColumn一起使用。注意:可以双向关联,也可以只配置一方,需要视实际需求而定。