您的位置:首页 > 其它

Hibernate学习笔记_ID生成策略

2014-12-02 20:24 591 查看
[b]一,xml生成id[/b]

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类型的。(数据库自增)

[b] 二, 注解方式:@GeneratedValue[/b]

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;
}
..........
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: