类级别注解
@Entity:映射实体类 @Entity(name = “tableName”) Name:可选,对应数据库中的一个表,若表名与实体类名相同,则可以省略。 @Teble(name = “”,catalog = “”,schema=“”)和@Entuty配合使用,只能标注在实体类的class处,表示实体对应的数据库的信息。 Name:可选,表示映射表的名称,默认表名和实体名称一致,只有在不一致的情况下才需要指定表名。 Catalog:可选,表示catalog名称,默认为catalog(“”). Schema:可选,表示schema名称,默认为schema(“”). @Embeddable表示一个非Entity类可以嵌入到另一个Entity类中的作为属性而存在。
|
属性级别注解
添加方式:(1)写在属性字段上面。(2)写在属性的get访问器上面 @Id:必须,定义了映射到数据库表的主键属性,一个实体类可以有一个或者多个属性被映射为主键。注意一个实体类如果定义了多个主键属性,该实体类必须实现Seriallizabler接口。 @Id @Column(length = 8) //指定数据库生成字段的大小,附在mysql中如果用主键为字符串类型,长度不能过长 private Integer emailId;
@ GeneratedValue(strategy = GenerationType,generator = “”):可选用于定义主键生成策略。 * GenerationType.AUTO :根据底层数据库自动选择(默认)需要整形支持
* GenerationType.IDENTITY :根据数据库的Identit字段生成
* GenerationType.SEQUENCE:使用SEQUENCE来决定主键的取值
* GenerationType.TABLE:使用指定表来决定主键取值,结合@TableGenerator使用 例: @Id @TableGenerator(name = "tab_cat_gen",allocationSize = 1) @GeneratedValue(strategy = GenerationType.TABLE) private Integer emailId; 例://字符串类型 主键生成器 @Id
@Embeddable @EmbeddedId:使用嵌入式主键类实现复合主键。注意:嵌入式主键必须实现Serialzable接口,必须有默认的public无参构造方法,必须覆盖equals和hshCode方法。 @SequenceGenerator() @Lob |
级联映射注解
一对一单项外键//注意:保存时应先保存外键对象,在保存主表对象。 @OneToOne(cascade = CascadeType.ALL) @Id (1):数据表不用建立外键关联,需要建立一对一关联映射。 @Test
|
“assigned”:主键由外部程序负责生成,在 save() 之前指定一个。
“hilo”:通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。 “seqhilo”:与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。 “increment” :主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。 “identity”:采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 “sequence”:采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。 “native”:由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。 “uuid.hex”: 由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。 “uuid.string”: 与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。 “foreign”:使用另外一个相关联的对象的标识符作为主键。
<id>元素中的<generator>用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现。
Increment:由hibernate自动递增生成标识符,用于为long, short或者int类型生成唯一标识。
identity :由底层数据库生成标识符(自动增长),返回的标识符是 long, short 或者int类型的。 sequence :hibernate根据底层数据库序列生成标识符,返回的标识符是long, short或者 int类型的。
hilo :使用一个高/低位算法来高效的生成long, short 或者int类型的标识符。
uuid.hex :用一个128-bit的UUID算法生成32位字符串类型的标识符。 native :根据底层数据库的能力选择identity, sequence 或者hilo中的一个。 assigned :让应用程序在save()之前为对象分配一个标示符。 foreign :使用另外一个相关联的对象的标识符。和<one-to-one>联合一起使用。 |