文档库 最新最全的文档下载
当前位置:文档库 › JPA常用注解

JPA常用注解

JPA常用注解
JPA常用注解

(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=https://www.wendangku.net/doc/7e9627597.html,ZY,optional=true)

fetch=FetchType.EAGER即时加载(默认值,即不写Basic注释的默认值)

fetch=https://www.wendangku.net/doc/7e9627597.html,ZY 惰性加载

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

用于标注数据库中字段类型为Clob和Blob类型(大数据类型)

Clob(Character Large Ojects)类型是长字符串类型,实体的类型可为char[]、Character[]、或者String类型

Blob(Binary Large Objects)类型是字节类型,实体的类型可为byte[]、Byte[]、或者实现了Serializable接口的类。

大数据类型,通常使用惰性加载的方式, @Basic(fetch=https://www.wendangku.net/doc/7e9627597.html,ZY)

(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属性的值指定属性存储的哪张数据库表。

没有用@Column中table值注解改变的属性,将会存在于默认和类名相同的Forum 表中。

(12)@Embeddable

@javax.persistence.Embeddable

嵌套映射,在被嵌套的类中使用Embeddable注解,说明这个就是一个可被嵌套的类,使用

@Embedded

当同一个类被不同的注解方式的类嵌套时,可能会出现一些错误,使用

@Access(AccessType. FIELD)设定被嵌套类的注解方式

(13)OneToOne

@OneToOne(fetch=FetchType,cascade=CascadeType)

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

fetch:表示抓取策略,默认为https://www.wendangku.net/doc/7e9627597.html,ZY

cascade:表示默认的级联操作策略

(14)OneToMany

@OneToMany(fetch=FetchType,cascade=CascadeType)

描述一个单向一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段.

fetch:表示抓取策略,默认为https://www.wendangku.net/doc/7e9627597.html,ZY

cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时,其关联的实体也应当被更新或删除

(15)ManyToOne

@ManyToOne(fetch=FetchType,cascade=CascadeType)

表示一个单向多对一的映射,该注解标注的属性通常是数据库表的外键

fetch:表示抓取策略,默认为FetchType.EAGER

cascade:表示默认的级联操作策略,可以指定为ALL,PERSIST,MERGE,REFRESH和REMOVE中的若干组合,默认为无级联操作

(16)ManyToMany

@ManyToMany

@ManyToMany描述一个多对多的关联.多对多关联上是两个一对多关联,但是在ManyToMany描述中,中间表是由ORM框架自动处理

targetEntity:表示多对多关联的另一个实体类的全名,例如:package.Book.class mappedBy:表示多对多关联的另一个实体类的对应集合属性名称

示例:

User实体表示用户,Book实体表示书籍,为了描述用户收藏的书籍,可以在User和Book之间建立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

@Transactional:spring整合JPA时用于注释事务。

(21)persistencecontext

@persistencecontext: spring整合JPA时在dao层,用于注释产生与当前线程事务相关的EntityManager。

例:@PersistenceContext

privateEntityManagerem;

(22)验证注解

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

相关文档