您的位置:首页 > 其它

Hibernate学习——(三)ID生成策略介绍

2016-03-06 20:15 190 查看
还记得@Id注解吗?Id即主键,在之前的实验中都是手工指定,然而这样在实际中很容易出错儿,因而在实际中往往采用数据库

自动帮我们生成Id。Hibernate或者说JPA已经实现了通过设置方式使Id自动生成。

先介绍通过XML方式设置的方式。在<id>标签内有一个generator标签,这个标签内部有一个class属性:

<generator class = "xxx" />
常用的class:

1、identity:每次自增1,支持DB2、Mysql、MS SQL Server等,该实体类属性值要求为long,short或者int。

2、sequence:每次自增1,支持DB2,ORACLE等。该实体类属性值要求为long,short或者int。

3、uuid:生成一个128位的UUID码,以32位十六进制数的字符串形式展示。所以要求实体类属性为String。

4、native:让其根据数据库的类型自行选择是采用IDENTITY还是SEQUENCE。(使用最多)

annotation的设置方法就是加入“@GeneratedValue”,放置在@Id下面。默认值为“Auto”。

1、auto:等同于XML方法里的native

2、identity

3、sequence

4、table:自定义一个generator,设置key和value名,将自己含有内容的数据库表作为key,以自己设置的步长开始随着数据库

中内容增加而增加主键的值。eg:

@TableGenerator(name = "Gen_test", table = "GENERATOR_TABLE", pkColumnName = "pk_key", valueColumnName = "pk_value",pkColumnValue = "manager_backup", allocationSize = 5)

name:generator的命名

table:生成的表的表名

pkColumnName:所生成的表的主键名

pkColumnValue:实体表所对应到生成器表中的主键名,这个键名是可以自定义的

valueColumnName:所生成表的值列的名

allocationSize:步长

之后如下设置:

@GeneratedValue(strategy = GenerationType.TABLE, generator = "Gen_test")

按照上面eg中的方法写后,添加3次数据,结果如下图所示:



Table的方法在跨数据库平台中用的最多,但是实际中用的很少。

有时候在实际工作中,需要用到联合主键,即将两个属性联合起来共同作为主键。

第一种XML的方式来设置:

1、将需要作为联合主键的多个对象(记为X)封装成一个类(记为Y)。在这个类中写X的getter,setter方法。同时这个类需

要继承java.io.Serializable接口以及覆写equals()和hashCode()方法

2、在XML中<id>的位置做如下更改的设置:



第二种Annotation版本,有三种写法:

①将需要作为联合主键的多个对象(记为X)封装成一个类(记为Y)。将主键类Y注解为@Embeddable,同时写上getter、setter方法以及继承

java.io.Serializable接口和覆写()及hashCode()方法,在Model类中的该主键对象的getter方法前注解为@Id。

②主键类X中不需要添加任何注解,在Model类中该主键对象的getter方法前将其注解为@EmbeddedId即可。

③不调用Y类的对象,直接在联合主键的几个分主键的getter方法前将其注解为@Id,随后在持久化类前加上注解@IdClass(value=Y.class)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: