JPA规范

JPA(Java Persistence API),是JavaEE5的标准ORM接口,可以理解为一种规范,基于JPA可以实现一些ORM框架来快速处理数据库数据表
Hibernate是JPA的标准实现。

Entity

@Entity表示该类是实体类,使用默认的orm规则(类名对应于数据库表种的表名,c类种的属性为表中的字段名)。如果想要改变这种默认的orm规则,就要使用@Table,@Column来做相应的映射。

@Entity(name="Customer")//name可选,缺省为类名即表名
public class Customer{}

Table

@Table用来定义entity主表的name,catalog,schema等属性。
Table(
name:表名,
catalog:对应关系数据库中的catalog,
schema:对应关系数据库中的schema,
UniqueConstraints:定义一个UniqueConstraint数组,指定需要建唯一约束的列
)

SecondaryTable

一个entity class可以映射到多表,@SecondaryTable用来定义单个从表的名字,主键名等属性。
SecondaryTable{
name:表名,
catalog:
schema:
pkJoin:定义一个PrimaryKeyJoinColumn数组,指定从表的主键列
}

SecondaryTables

@SecondaryTables{
value={
@SecondaryTable(xxx),

}
}

UniqueConstraint

@UniqueConstraint定义在Table或者SecondaryTable元数据里,用来指定建表时需要建唯一约束的列,即不允许重复
@Table(
xxxx,
uniqueConstraints={
@UniqueConstraint(columnNames={"",""})
}

Column

@Column定义了映射到数据库的列的所有属性,列明,是否唯一,是否允许为空,是否允许更新等
@Column{
name:列名
unique:是否唯一
nullable:是否为空
insertable:是否允许插入
updatable:是否允许更新
columnDefinition:定义建表时创建此列的DLL
secondaryTable:从表名,如果此列不建在主表上,该属性定义该列所在从表的名字

}

OneToOne

@OneToOne描述一对一的关联关系
@OneToOne{
fetch:表示抓取策略,
cascade:表示级联操作策略
}

ManyToOne

表示多对一的映射,该注释标注的属性通常是数据库表的外键。
@ManyToOne{
optional:是否允许该字段为null,
fetch:表示抓取策略
cascade:
targetEntity:表示属性关联的实体类型。通常不指定
}

OneToMany

@OneToMany描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段。
@OneToMany{
fetch:
cascade:
}

ManyToMany

@ManyToMany描述一个多对多的关联

JoinColumn

如果在entity class的field上定义了关系(one2one或one2many等),我们通过JoinColumn来定义关系的属性。JoinColumn的大部分属性和Column类似。

元数据属性说明:
• name:列名。
• referencedColumnName:该列指向列的列名(建表时该列作为外键列指向关系另一端的指定列)
• unique: 是否唯一
• nullable: 是否允许为空
• insertable: 是否允许插入
• updatable: 是否允许更新
• columnDefinition: 定义建表时创建此列的DDL
• secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。

IdClass

当Entity使用复合主键时,需要定一个类作为id class:
类必须是public,并提供一个public的空构造函数
必须实现Serializable接口,重写equals和hashCode方法,
entityclass 的所有id field在id class都要有定义,且类型一样。

public class EmployeePK implements java.io.Serializable{
	String empName;
	Integer empAge;
	public EmployeePK(){}
	public boolean equals(Object obj){....}
	public int hashCode(){...}
}
@Entity
@IdClass(xxx.EmployeePK.class)
public class Employee{
	@Id
	String empName;
	@Id
	Integer empAge;
}

Transient

@Transient表示该属性并不是一个到数据库表的字段的映射,指定的属性不会持久化,ORM框架会自动忽略该属性。

Version

Version指定实体类在乐观事务中的version属性。在实体类重新由EntityManager管理并且加入到乐观事务中时,保证完整性。每一个类只能有一个属性被指定为version,version属性应该映射到实体类的主表上。

Lob

Lob指定一个属性作为数据库支持的大对象类型在数据库中存储。使用LobType这个枚举来定义Lob是二进制类型还是字符类型。

LobType枚举类型说明:
• BLOB 二进制大对象,Byte[]或者Serializable的类型可以指定为BLOB。
• CLOB 字符型大对象,char[]、Character[]或String类型可以指定为CLOB。

元数据属性说明:
• fetch: 定义这个字段是lazy loaded还是eagerly fetched。数据类型是FetchType枚举,默认为LAZY,即lazy loaded.
• type: 定义这个字段在数据库中的JDBC数据类型。数据类型是LobType枚举,默认为BLOB。

TableGenerator

TableGenerator定义一个主键值生成器,在Id这个元数据的generate=TABLE时,generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。
生成器是为多个实体类提供连续的ID值的表,每一行为一个类提供ID值,ID值通常是整数。

元数据属性说明:
• name:生成器的唯一名字,可以被Id元数据使用。
• table:生成器用来存储id值的Table定义。
• pkColumnName:生成器表的主键名称。
• valueColumnName:生成器表的ID值的列名称。
• pkColumnValue:生成器表中的一行数据的主键值。
• initialValue:id值的初始值。
• allocationSize:id值的增量。

SequenceGenerator

SequenceGenerator定义一个主键值生成器,在Id这个元数据的generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。生成器是数据库支持的sequence对象。

元数据属性说明:
• name:生成器的唯一名字,可以被Id元数据使用。
• sequenceName:数据库中,sequence对象的名称。如果不指定,会使用提供商指定的默认名称。
• initialValue:id值的初始值。
• allocationSize:id值的增量。

DiscriminatorColumn

DiscriminatorColumn定义在使用SINGLE_TABLE或JOINED继承策略的表中区别不继承层次的列。

元数据属性说明:
• name:column的名字。默认值为TYPE。
• columnDefinition:生成DDL的sql片断。
• length:String类型的column的长度,其他类型使用默认值10。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值