hibernate提供了产生自动增长类型主键的多种策略,这里以increment为例说明具体用法:
1、在数据库中建立表,主键名称为ID,类型为varchar2(字符串型)
2、在**.hbm.xml(hibernate映射文件)中配置如下
<class name="com.jat.bisarea.ho.Test" table="BA_VVTEST">
<id name="id" type="int" column="ID">
//该句指定使用hibernate自带的increment策略生成主键
<generator class="increment"/>
</id>
<property name="uname" type="java.lang.String" column="UNAME"/>
</class>
3、在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可,相关java代码如下:
Session s = HibernateUtil.currentSession();
Transaction tx = s.beginTransaction();
Test test = new Test();
String uname = httpServletRequest.getParameter("uname");
test.setUname(uname);
//只需对uname进行set,id由hibernate生成
s.save(test);
tx.commit();
4、使用其它策略的方法基本一致,例如hilo、seqhilo等
Generator 为每个 POJO 的实例提供唯一标识。一般情况,我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例,其中包括:
“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”
使用另外一个相关联的对象的标识符作为主键。
分享到:
相关推荐
综上所述,Hibernate提供了丰富的主键生成策略,涵盖了从简单的自动增长到复杂的分布式唯一ID生成。开发者应根据具体的应用需求和数据库特性,选择最合适的主键生成策略,以确保系统的稳定性和性能。无论是追求高...
1. **Identity方式**:`<generator class="identity"/>` 这种方式依赖于数据库自身的自动增长机制。例如,在MySQL中,它可以与`AUTO_INCREMENT`属性配合使用。当Hibernate保存一个新实体时,数据库会自动为该实体...
这种策略适用于支持自动增长主键的数据库,如MySQL的`AUTO_INCREMENT`或SQL Server的`IDENTITY`。在Hibernate中,只需在实体类的主键字段上添加`@GeneratedValue(strategy = GenerationType.IDENTITY)`注解,...
这种策略依赖于数据库自身的自动增长功能,例如MySQL的`AUTO_INCREMENT`或SQL Server的`IDENTITY`。Hibernate不需进行任何操作,数据库会自动为新行分配主键。 6. **sequence**策略: 与`identity`类似,但适用于...
本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保数据表中的主键唯一性至关重要。 ### Oracle数据库的自动增长机制 Oracle数据库提供了强大的序列(sequence)功能来支持自动增长...
适用于主键是采用自然主键的形式,即主键列不是自动增长列。 - **优点**:灵活性高,可以根据具体业务逻辑设置主键值。 - **缺点**:在执行新增操作时,需查询数据库判断生成的主键是否已经存在,增加了系统的...
identity策略依赖于数据库的自动增长功能,如MySQL的`AUTO_INCREMENT`或SQL Server的`IDENTITY`。Hibernate会在插入记录时自动获取数据库生成的主键值。这种方法简单且高效,但不跨数据库,因为不是所有数据库都...
- **定义**:利用数据库自身的自动增长字段特性来生成主键。 - **支持的数据库**:SQL Server, MySQL等。 - **优点**: - 简单高效,性能优秀。 - **缺点**: - 不适用于所有数据库类型,比如Oracle就不支持自动...
2. **`identity`**:相当于JPA的`GenerationType.IDENTITY`,适合自动增长主键的数据库。 3. **`sequence`**:与JPA的`GenerationType.SEQUENCE`相同,使用数据库序列。 4. **`hilo`**:HiLo算法,通过高位和低位...
例如,创建一个名为`t_user`的表,包含`id`(主键,自动增长),`uname`(用户名,非空),`upassword`(密码,非空)和`email`(电子邮件,非空)四列。 执行SQL脚本后,数据表`t_user`会在MySQL数据库中创建成功...
例如,在大量并发插入的情况下,自动增长主键可能会成为性能瓶颈,因为每次插入都需要获取下一个主键值,可能导致锁竞争。此时,预生成一批主键或者使用UUID可能是更好的选择。 此外,对于分布式系统,全局唯一性的...
1. **increment**:此策略对long、short或int类型的字段生成自动增长的主键。主键值按数值顺序递增。但这种方法存在并发问题,如果多实例访问同一数据库,可能导致主键重复。 2. **identity**:适用于SQL Server、...
4. **identity**: 依赖于数据库自身的自动增长功能,如MySQL的 AUTO_INCREMENT 和 SQL Server的 IDENTITY。适用于DB2、MySQL、MS SQL Server、Sybase和HypersonicSQL。 5. **sequence**: 使用数据库的序列生成主键...
3. **主键自增**:Hibernate提供了多种主键生成策略,包括自动增长(Identity)、序列(Sequence)等,这些策略确保了每个新创建的对象都有一个唯一的标识。 4. **查询操作**:这包括了HQL(Hibernate Query ...
* Identity:支持主键自动增长 * Uuid:持久化类中的属性必须是 String 类型 * Native:Hibernate 会根据数据库的不同,选择合适的主键的生成策略 Sequence * 是 oracle 内部特有的内容,相当于 uuid,所以是字符...
3. 最后,定义`Person`实体,主键是常规的自动增长ID,但包含对`Passport`的引用: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType;...