JPA常用注解

参考文章:https://blog.csdn.net/mr_doudo/article/details/79380642

(1)Entity

@javax.persistence.Entity(name="xxx") 
name指定实体Bean的名称,默认值为 bean class 的非限定类名(不带包的短类名)

(2)Table

@javax.persistence.Table(catalog="xx",name="xx",schema="xx",
       uniqueConstraints={ @UniqueConstraint(columnNames={"xx","xx"})})

name:指定表的名称
catalog:指定数据库名称
schema:指定数据库的用户名
uniqueConstraints:指定唯一性字段约束(字段值唯一不重复)

如为personid 和name 字段指定唯一性约束:
uniqueConstraints={ @UniqueConstraint(columnNames={"personid", "name"})}

(3)Id

@javax.persistence.Id()
映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.

(4)GeneratedValue

@javax.persistence.GeneratedValue(generator="xxx",strategy=GenerationType.AUTO)
strategy:表示主键生成策略,有

​​​​​​​方式一:@GeneratedValue(strategy=GenerationType.AUTO) 默认策略,生成方式取决于底层的数据库。
方式二:@GeneratedValue(strategy = GenerationType.IDENTITY)指定“自动增长”策略,适用于MySQL。 
方式三:@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_tbl_user")
       指定“序列”策略,适用于Oracle。其中generator表示生成器的名字,这个属性通常和ORM框架相关。
       例如,Hibernate可以指定uuid等主键生成方式(要和@SequenceGenerator(name = "seq_tbl_user", 
       sequenceName = "seq_tbl_user", allocationSize = 1)注解配合使用,其中name指定生成器的名 
       字(与generator的值一样),sequenceName指定数据库中定义序列的名字,allocationSize指定序
       列每次增长1 )
方式四:@GeneratedValue(strategy=GenerationType.TABLE)  使用一个特定的数据库表格来保存主键

(5)Basic

@javax.persistence.Basic(fetch=FetchType.LAZY,optional=true)
fetch=FetchType.EAGER 即时加载(默认值,即不写Basic注释的默认值)

fetch=FetchType.LAZY    惰性加载
optional:指定在生成数据库结构时字段是否允许为 null,(默认值为true,允许为空)

(6)Column

@javax.persistence.Column(length=15,nullable=false,columnDefinition="",
       insertable=true,scale=10,table="",updatable=true)
@Column   注解指定字段的详细定义
  name:     数据库字段的名称,默认与属性名称一致 
  nullable: 是否允许为null,默认为true
  unique:   是否唯一,默认为false 
  length:   字段的长度,仅对String类型的字段有效 
  columnDefinition: 表示该字段在数据库中的实际类型,通常ORM框架根据属性类型自动判断数据库中字段的类型,
例如:
    String的默认映射类型为VARCHAR, 如果要将String类型映射到特定数据库的BLOB或TEXT字段类型, 
   该属性非常有用
   如: @Column(name="BIRTH",nullable="false",columnDefinition="TEXT") 
   insertable: 
      默认情况下,JPA假设所有列始终包含在 SQL INSERT 语句中。
      如果该列不应包含在这些语句中,请将 insertable 设置为 false 
   updatable: 
      默认情况下,JPA假设所有列始终包含在 SQL UPDATE 语句中。
      如果该列不应包含在这些语句中,请将 updatable 设置为 false 
   table: 
      当实体类使用 @SecondaryTable注解时会保存于多张表中,
      该字段指定实体类中的某个属性保存于到那张表,不设置时该属性,默认保存到与类名相同的默认表中。

(7)Temporal

@javax.persistence.Temporal(TemporalType.DATE)
方式一:@Temporal(TemporalType.DATE)映射为日期(只有日期)
方式二:@Temporal(TemporalType.TIME)映射为日期(只有时间)
方式三:@Temporal(TemporalType.TIMESTAMP)映射为日期(日期+时间)

(8)Enumerated

@javax.persistence.Enumerated(EnumType.STRING)
枚举类型成员属性映射
  EnumType.STRING指定属性映射为字符串。
  EnumType.ORDINAL指定属性映射为数据序。

(9)Lob

@javax.persistence.Lob
用于标注数据库中字段类型为ClobBlob类型(大数据类型)
Clob(Character Large Ojects)类型是长字符串类型,实体的类型可为char[]Character[]、或者String类型
Blob(Binary Large Objects)类型是字节类型,实体的类型可为byte[]Byte[]、或者实现了Serializable接口的类。
大数据类型,通常使用惰性加载的方式, @Basic(fetch=FetchType.LAZY)

(10)Transient
@javax.persistence.Transient
@Transient
表示该属性并非一个到数据库表的字段的映射,不会被ORM框架初始化,ORM框架将忽略该属性

(11)SecondaryTable 
@javax.persistence.SecondaryTable

将一个实体映射到多个数据库表中,例如:
@Entity
@SecondaryTables({ @SecondaryTable(name = "Address"), @SecondaryTable(name = "Comments") })
public class Forum implements Serializable {
     @Column(table = "Address") 
     private String street; 
     @Column(table = "Address") 
     private String city; 
     @Column(table = "Address") 
     private String conutry; 
     @Column(table = "Comments") 
     private String title; 
     @Column(table = "Comments") 
     private String Comments; 
     @Column(table = "Comments") 
}
table
属性的值指定属性存储的哪张数据库表。
没有用 @Columntable 注解改变的属性,将会存在于默认和类名相同的 Forum 表中。
(12)@Embeddable
@javax.persistence.Embeddable
嵌套映射,在被嵌套的类中使用Embeddable注解,说明这个就是一个可被嵌套的类,使用 @Embedded
当同一个类被不同的注解方式的类嵌套时,可能会出现一些错误,使用 @Access(AccessType. FIELD)设定被嵌套类的注解方式

(13)OneToOne

@OneToOne(fetch=FetchType,cascade=CascadeType)

描述一个单向一对一的关联关系

fetch:表示抓取策略,默认为FetchType.LAZY
cascade:
表示默认的级联操作策略

(14)OneToMany

@OneToMany(fetch=FetchType,cascade=CascadeType)

描述一个单向一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.
fetch:
表示抓取策略,默认为FetchType.LAZY
cascade:
表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新或删除

(15)ManyToOne

@ManyToOne(fetch=FetchType,cascade=CascadeType)

表示一个单向多对一的映射,该注解标注的属性通常是数据库表的外键
fetch:表示抓取策略,默认为FetchType.EAGER
cascade:
表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESHREMOVE中的若干组合,默认为无级联操作

(16)ManyToMany

@ManyToMany
@ManyToMany
描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理
targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class
mappedBy:
表示多对多关联的另一个实体类的对应集合属性名称
示例:
User
实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在UserBook之间建立ManyToMany关联

(17)JoinColumn

@JoinColumn(name=name)
@JoinColumn
@Column类似,不同是它描述的不是一个简单字段,而一一个关联字段,例如描述一个@ManyToOne的字段
name:该属性在数据库中字段的名称.由于@JoinColumn描述的是一个关联字段,默认值为:实体的名称+下划线+实体的主键名称。
(18)Query

@Query("JPQL语句")repository中自定义查询方法,使用JPQL语句

@Query(nativeQuery = true,value = "SQL语句")
nativeQuery:设置为true表示可以本地查询,即在value中使用原生SQL语句查询。默认值:false
value :原生SQL语句

(19)Modifying

@Modifying注解与@Query一起使用表示将查询操作标识为修改查询,这样框架最终会生成一个更新的操作,而非查询
(20)Transactional
@Transactionalspring整合JPA时用于注释事务。
(21)persistencecontext
@persistencecontext: spring
整合JPA时在dao层,用于注释产生与当前线程事务相关的 EntityManager
例: @PersistenceContext

           private EntityManager em;

(22)验证注解

注解

适用类型

说明

示例

@Pattern

String

通过正则表达式来验证字符串

@attern(regex=”[a-z]{6}”)

@Length

String

验证字符串的长度

@length(min=3,max=20)

 @Email

String

验证一个Email地址是否有效

@email

@Range

Long

验证一个整型是否在有效的范围内

@Range(min=0,max=100)

@Min

Long

验证一个整型必须不小于指定值

@Min(value=10)

@Max

Long

验证一个整型必须不大于指定值

@Max(value=20)

@Size

集合或数组

集合或数组的大小是否在指定范围内

@Size(min=1,max=255)

以上每个注解都可能性有一个message属性,用于在验证失败后向用户返回的消息,还可以同个属性上使用多个注解

你可能感兴趣的:(hibernate,hibernate)