Spring Data Jpa (五)@Entity实例里面经常使用注解详解

详细介绍javax.persistence下面的Entity中经常使用的注解。java

  虽然Spring Data JPA已经帮咱们对数据的操做封装得很好了,约定大于配置思想,帮咱们默认了不少东西。JPA(Java持久性API)是存储业务实体关联的实体来源。它显示了如何定义一个面向普通Java对象(POJO)做为一个实体,以及如何与管理关系实体提供一套标准。所以,javax.persistence下面的有些注解仍是必需要去了解的,以便于更好地提升工做效率。算法

 

1.基本注解sql

  基本注解包括@Entity、@Table、@Id、@IdClass、@GeneratedValue、@Basic、@Transient、@Column、@Temporal、@Enumerated、@Lob数据库

 

1.1@Entityfetch

  @Entity定义对象将会成为被JPA管理的实体,将映射到指定的数据库表。优化

1.2@Table对象

  @Table指定数据库的表名。blog

1.3@Id接口

  @Id定义属性为数据库的主键,一个实体里面必须有一个。内存

1.4@IdClass

  @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定义该属性对应数据库中的列名

1.9@Temporal

  @Temporal用来设置Date类型的属性映射到对应精度的字段。

  (1)@Temporal(TemporalType.DATE)映射为日期∥date(只有日期)

  (2)@Temporal(TemporalType.TIME)映射为日期∥time(只有时间)。

  (3)@Temporal(TemporalType.TIMESTAMP)映射为日期∥datetime(日期+时间)。

1.10@Enumerated

  直接映射enum枚举类型的字段

  

1.11@Lob

  @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一块儿使用。注意:能够双向关联,也能够只配置一方,须要视实际需求而定。

相关文章
相关标签/搜索