版本: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);
}
}
}
总结: 两种方法相比之下,方法一比较简单,能满足一般情况,项目中用的比较多。方法一无法处理时才用方法二,例如从其它系统数据库复制表的记录时用。
分享到:
相关推荐
本文将重点介绍在Oracle数据库环境下,使用Hibernate的“native”策略来生成主键的具体方法及注意事项。 #### 二、主键生成策略概述 在Hibernate中,主键生成策略主要包括以下几种: - **identity**:由数据库...
### 常用Hibernate主键生成策略详解 #### 一、引言 在数据库设计与操作过程中,主键是确保数据唯一性的关键要素之一。在实际应用中,开发者经常需要处理不同类型的数据库,并且需要应对各种不同的主键生成需求。...
本文将详细介绍几种常见的主键生成策略,并结合示例代码帮助读者更好地理解和运用。 #### 二、assigned - 外部程序生成 **定义:** `assigned`是一种由外部程序负责生成主键的策略。在调用`save()`方法之前,需要...
在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...
在Java的持久化框架Hibernate中,一对一(One-to-One)映射是一种常见的关系映射方式,它用于表示两个实体之间一对一的关联关系。在这种关系中,一个实体对应另一个实体的唯一实例。本实例将深入探讨如何在Hibernate...
总结来说,Hibernate通过`@IdClass`和`@EmbeddedId`两种方式提供了对复合主键的支持。理解和熟练掌握这些概念,可以帮助开发者更好地处理复杂的数据模型,提高代码的可维护性和灵活性。在实际项目中,选择合适的复合...
本篇文章将详细探讨Hibernate中一对一关联的两种实现方式:基于主键关联和基于外键关联,并通过源码分析及实际应用示例来阐述它们的工作原理和配置细节。 一、基于主键关联 1.1 基本概念 基于主键关联是指两个实体...
本篇文章将详细探讨Hibernate中实现一对一映射的两种方式,并结合源码分析其原理。 一、主键外键关联(Primary Key Join) 这是最常用的一对一映射方式,通过共享主键来实现两个实体之间的关联。这种方式下,一个...
### 使用Hibernate形式生成UUID的算法解析 ...在实际应用中,`UUIDHexGenerator`类可以被集成到Hibernate的实体类中,作为自动生成的主键字段,从而简化数据库表结构的设计,并提高系统的可扩展性和安全性。
有两种主要的方法: 1. `create()`:这个方法会在数据库中创建所有定义的表,但不会删除已经存在的表。 2. `dropAndCreate()`:这个方法会先删除已存在的表,然后再创建新的表。 在运行`SchemaExport`时,需要传入...
本篇文章将深入探讨两种实现一对一关联的方式:主键关联(Primary Key Join)和唯一外键关联(ForeignKey Join),并结合源码和实际工具进行详细讲解。 一、主键关联(Primary Key Join) 1. 主键关联的概念: ...
`SeqHiLo`是`Sequence`和`HiLo`两种算法的结合体,它在支持序列操作的数据库中尤其有用。与普通的`HiLo`不同,`SeqHiLo`使用数据库序列作为高位值的来源。 在Hibernate映射文件中可以这样配置: ```xml <id name=...
查询数据的方法有两种实现,一种是基于HQL(Hibernate Query Language),另一种是基于原生SQL。 - 基于HQL的通用查询: HQL是Hibernate提供的面向对象的查询语言,可以方便地操作对象和属性。`select`方法接收一个...
在Java持久化框架Hibernate中,一对一(OneToOne)关系模型是一种常见的对象关系映射(ORM)方式,用于表示两个实体类之间一对一的关联。在这个示例中,我们将会深入探讨如何在Hibernate中设置和操作一对一的关系,...
此外,我们还将介绍几种不同的标识符生成策略,并通过示例代码来展示这些策略的具体应用。 #### 二、手动分配标识符的问题 在前面的例子中,我们使用ISBN作为书籍对象的标识符。这种标识符是由用户手动输入的,因此...
4. **事务管理(Transaction Management)**: Hibernate支持JTA和JDBC两种事务管理方式。 5. **实体状态管理**: Hibernate区分了瞬时态、持久态、脱管态和游离态,便于理解对象的生命周期。 以上内容只是Hibernate...
2. **属性映射(Field Mapping)**:Hibernate使用`@Id`注解定义主键,`@GeneratedValue`用于指定主键生成策略。其他属性可以通过`@ManyToOne`、`@OneToOne`、`@OneToMany`等注解定义关联关系。 3. **Session接口**...
- 自动化程度高:可以根据XML配置文件自动生成相应的数据库表结构及对象到关系的映射。 - 对象持久化:将Java对象的状态持久化存储到数据库中。 - 支持多种数据库:通过不同的数据库方言配置,Hibernate可以很好...
- **查询语言(Criteria API, JPQL)**:Hibernate JPA提供了JPQL(Java Persistence Query Language)和Criteria API两种查询方式,它们允许以面向对象的方式编写查询语句,而不是直接写SQL。 **3. MySQL数据库...