`

Hibernate主键ID自动生成两种方法示例

    博客分类:
  • SSH
阅读更多
版本:hibernate-3.2.7
方法之一: 用uuid生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找到是抛出异常。


<id name="id" type="java.lang.String" column="ID">
		<generator class="uuid.hex" />
    </id>



public class XXXClass{
        /** id */
        private String id;
  
        public void setId(String id) {
		this.id = id;
	}
	
	public String getId() {
		return id;
	}
}


方法之二: 用org.hibernate.id.UUIDHexGenerator生成唯一的主键, 用这种方法,如果对象的id为null,保存时会自动生成一个UUID,如果id不为null,保存时会从数据库中找出这条记录,然后执行update,如果未找则执行insert。


<id name="id" type="java.lang.String" column="ID">
		<generator class="AssignCopiedId" />
    </id>



public class XXXClass implements AssignedIdModel{
        /** id */
        private String id;
  
        public void setId(String id) {
		this.id = id;
	}
	
	public String getId() {
		return id;
	}

        @Override
	public String getAssignedId() {
		return assignedId;
	}

	public void setAssignedId(String assignedId) {
		this.assignedId = assignedId;
	}
}




public interface AssignedIdModel {
	
	public String getAssignedId();

}



import org.hibernate.engine.SessionImplementor;
import org.hibernate.id.UUIDHexGenerator;

public class AssignCopiedId extends UUIDHexGenerator {
	public Serializable generate(SessionImplementor session, Object obj) {
		if (obj instanceof AssignedIdModel
				&& (((AssignedIdModel) obj).getAssignedId() != null 
					&& ((AssignedIdModel) obj).getAssignedId().trim().length() > 0)) {
			return ((AssignedIdModel) obj).getAssignedId();
		} else {
			return super.generate(session, obj);
		}
	}
}



总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。
分享到:
评论
1 楼 dragonxiong 2012-03-30  
  又在玩这个。。。。

相关推荐

    hibernate映射主键生成策略native

    本文将重点介绍在Oracle数据库环境下,使用Hibernate的“native”策略来生成主键的具体方法及注意事项。 #### 二、主键生成策略概述 在Hibernate中,主键生成策略主要包括以下几种: - **identity**:由数据库...

    常用Hibernate主键生成策略

    ### 常用Hibernate主键生成策略详解 #### 一、引言 在数据库设计与操作过程中,主键是确保数据唯一性的关键要素之一。在实际应用中,开发者经常需要处理不同类型的数据库,并且需要应对各种不同的主键生成需求。...

    Hibernate各种主键生成策略与配置详解

    本文将详细介绍几种常见的主键生成策略,并结合示例代码帮助读者更好地理解和运用。 #### 二、assigned - 外部程序生成 **定义:** `assigned`是一种由外部程序负责生成主键的策略。在调用`save()`方法之前,需要...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

    hibernate 主键一对一映射(单向) 实例(java类)

    在Java的持久化框架Hibernate中,一对一(One-to-One)映射是一种常见的关系映射方式,它用于表示两个实体之间一对一的关联关系。在这种关系中,一个实体对应另一个实体的唯一实例。本实例将深入探讨如何在Hibernate...

    Hibernate复合主键.

    总结来说,Hibernate通过`@IdClass`和`@EmbeddedId`两种方式提供了对复合主键的支持。理解和熟练掌握这些概念,可以帮助开发者更好地处理复杂的数据模型,提高代码的可维护性和灵活性。在实际项目中,选择合适的复合...

    hibernate一对一的两种实现方式

    本篇文章将详细探讨Hibernate中一对一关联的两种实现方式:基于主键关联和基于外键关联,并通过源码分析及实际应用示例来阐述它们的工作原理和配置细节。 一、基于主键关联 1.1 基本概念 基于主键关联是指两个实体...

    hibernate one to one 映射到两种方式

    本篇文章将详细探讨Hibernate中实现一对一映射的两种方式,并结合源码分析其原理。 一、主键外键关联(Primary Key Join) 这是最常用的一对一映射方式,通过共享主键来实现两个实体之间的关联。这种方式下,一个...

    用hibernate形式uuid的生成算法

    ### 使用Hibernate形式生成UUID的算法解析 ...在实际应用中,`UUIDHexGenerator`类可以被集成到Hibernate的实体类中,作为自动生成的主键字段,从而简化数据库表结构的设计,并提高系统的可扩展性和安全性。

    hibernate动态生成表结构

    有两种主要的方法: 1. `create()`:这个方法会在数据库中创建所有定义的表,但不会删除已经存在的表。 2. `dropAndCreate()`:这个方法会先删除已存在的表,然后再创建新的表。 在运行`SchemaExport`时,需要传入...

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    本篇文章将深入探讨两种实现一对一关联的方式:主键关联(Primary Key Join)和唯一外键关联(ForeignKey Join),并结合源码和实际工具进行详细讲解。 一、主键关联(Primary Key Join) 1. 主键关联的概念: ...

    ID生成策略

    `SeqHiLo`是`Sequence`和`HiLo`两种算法的结合体,它在支持序列操作的数据库中尤其有用。与普通的`HiLo`不同,`SeqHiLo`使用数据库序列作为高位值的来源。 在Hibernate映射文件中可以这样配置: ```xml &lt;id name=...

    hibernate数据库通用SQL代码

    查询数据的方法有两种实现,一种是基于HQL(Hibernate Query Language),另一种是基于原生SQL。 - 基于HQL的通用查询: HQL是Hibernate提供的面向对象的查询语言,可以方便地操作对象和属性。`select`方法接收一个...

    hibernate一对一关系模型示例

    在Java持久化框架Hibernate中,一对一(OneToOne)关系模型是一种常见的对象关系映射(ORM)方式,用于表示两个实体类之间一对一的关联。在这个示例中,我们将会深入探讨如何在Hibernate中设置和操作一对一的关系,...

    Hibernate Tutorial 03 (Object Identifier).pdf

    此外,我们还将介绍几种不同的标识符生成策略,并通过示例代码来展示这些策略的具体应用。 #### 二、手动分配标识符的问题 在前面的例子中,我们使用ISBN作为书籍对象的标识符。这种标识符是由用户手动输入的,因此...

    Hibernate 中文开发者文档

    4. **事务管理(Transaction Management)**: Hibernate支持JTA和JDBC两种事务管理方式。 5. **实体状态管理**: Hibernate区分了瞬时态、持久态、脱管态和游离态,便于理解对象的生命周期。 以上内容只是Hibernate...

    Hibernate生产SQL语句

    2. **属性映射(Field Mapping)**:Hibernate使用`@Id`注解定义主键,`@GeneratedValue`用于指定主键生成策略。其他属性可以通过`@ManyToOne`、`@OneToOne`、`@OneToMany`等注解定义关联关系。 3. **Session接口**...

    hibernate 资料hibernate 资料hibernate 资料

    - 自动化程度高:可以根据XML配置文件自动生成相应的数据库表结构及对象到关系的映射。 - 对象持久化:将Java对象的状态持久化存储到数据库中。 - 支持多种数据库:通过不同的数据库方言配置,Hibernate可以很好...

    Hibernate JPA jar包

    - **查询语言(Criteria API, JPQL)**:Hibernate JPA提供了JPQL(Java Persistence Query Language)和Criteria API两种查询方式,它们允许以面向对象的方式编写查询语句,而不是直接写SQL。 **3. MySQL数据库...

Global site tag (gtag.js) - Google Analytics