Hibernate学习笔记_ID生成策略
一,xml生成id
a) generator
<hibernate-mapping> <class name="com.bjsxt.hibernate.Student"> <id name="id"> <generator class="native"></generator> </id> <property name="age" /> <property name="sex" /> <property name="good" type="yes_no"></property> </class> </hibernate-mapping>
b) 常用四个:native identity sequence uuid(跨平台 native uuid)
native
根据底层数据库的能力选择identity,sequence 或者hilo中的一个。(数据库自增)
identity
对DB2,MySQL, MS SQL Server,Sybase和HypersonicSQL的内置标识字段提供支持。 返回的标识符是long, short 或者int类型的。 (数据库自增)
sequence
在DB2,PostgreSQL, Oracle, SAPDB, McKoi中使用序列(sequence), 而在Interbase中使用生成器(generator)。返回的标识符是long, short或者 int类型的。(数据库自增)
二, 注解方式:@GeneratedValue
a) 自定义ID
b) AUTO(直接写 @GeneratedValue 相当如native)
i. 默认:对 MySQL,使用auto_increment
ii. 对 Oracle使用hibernate_sequence(名称固定)
@Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; }
c) IDENTITY(@GeneratedValue(strategy=GenerationType.IDENTITY))
d) SEQUENCE(@GeneratedValue(strategy=GenerationType.SEQUENCE))
i. @SequenceGenerator(可自定义在数据库生成指定的sequence名)
@Entity @Table(name="_Teacher") @SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB") //"teacherSEQ"为@SequenceGenerator的标识名 ,"teacherSEQ_DB"为指定到数据库生成的Sequence名public class Teacher { private int id; private String name; private String title; private String money; private Date birthDay; private ZhiCheng zhiCheng; @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSEQ") public int getId() { return id; } public void setId(int id) { this.id = id; }
............ }
e) TABLE (可以忘记)
原理:就是在数据库中建立一个表,这个表包含两个字段,一个字段表示名称,另一个字段表示值。每次在添加数据时,使用第一个字段的名称,来取值作为添加数据的ID,然后再给这个值累加一个值再次存入数据库,以便下次取出使用。
@TableGenerator( name="Teacher_GEN", //生成策略的名称 table="GENERATOR_TABLE",//在数据库生成表的名称 pkColumnName = "pk_key",//表中第一个字段的字段名 类型为varchar,key valueColumnName = "pk_value",//表中第二个字段的字段名 int ,value pkColumnValue="Teacher", //这个策略中使用该记录的第一个字段的值(key值) initialValue = 1, //这个策略中使用该记录的第二个字段的值(value值)初始化值 allocationSize=1//每次使用数据后累加的数值 ) @SequenceGenerator(name="teacherSEQ",sequenceName="teacherSEQ_DB") public class Teacher { private int id; private String name; private String title; private String money; private Date birthDay; private ZhiCheng zhiCheng; @Id @GeneratedValue(strategy=GenerationType.TABLE,generator="Teacher_GEN") public int getId() { return id; } public void setId(int id) { this.id = id; }
.......... }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。