`
loveseaside
  • 浏览: 151996 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

hibernate标识符属性生成策略与对象识别

阅读更多

数据库中的主键

在数据库表中能够唯一识别每一条记录的一个字段或者多个字段的组合,称之为主键(Primary Key)。主键的主要作用将表中记录的数据和其他表中的数据进行关联。作为主键的需要满足如下的条件:

主键值所在的字段不能为null。

主键值具有唯一性,不能重复。

主键必须简洁,不要包含过多属性。

表中的主键通过数据库DDL语句设置的,主键又可以分为自然主键(Natrual Key)和代理主键。

1  自然主键

在数据库表中把具有业务逻辑含义的字段作为主键,称为"自然主键(Natural Key)"。例如,如果有一个employee表,保存某个公司所有员工的基本信息,其中员工的身份证号具有唯一性,所以可以使用身份证号作为这个表的主键,还可以通过两个或者多个字段的组合作为主键,称为"复合主键"。例如,在employee表中,因为姓名和出生日期字段组合后也具有唯一性,所以其组合也可以作为employee表的复合主键。

数据库中表与表通过主键与外键进行关联,修改表中的主键值会对数据库中数据的维护带来非常大的麻烦,应该尽量避免被修改,但是由于自然主键也表示了表中的业务逻辑信息,所以存在一定的被修改概率。例如:在某些运行系统中,如果数据库的某些表使用身份证号作为主键,则在最近的这次身份证号码从15位升级到18位的过程中,增加了不必要的系统升级的工作量。

在数据库设计中应该尽量避免使用自然主键,而使用代理主键。

2  代理主键

在数据库表中采用一个与当前表中逻辑信息无关的字段作为其主键,即代理主键这样的主键一般可以采用数据库中自动增长的生成机制自动生成主键值,字段名通常命名为"id"。

例如,在Oracle数据库中主键值即可采用序列生成;在MySQL和MS SQL Server数据库中代理主键的字段类型设置为自动增长(auto increment)类型,数据类型一般为整形(Integer)。

标识符属性

在数据库表中通过使用主键实现记录识别的唯一性,而Hibernate中的持久化对象则通过标识符(identifier)属性来实现唯一性识别。

Hibernate中的标识符属性也可以称为"Hibernate主键"它赋予每个持久化对象独一无二的数值,所以可以认为标识符属性是数据库主键的等价物。

分享到:
评论

相关推荐

    Hibernate 映射文件自动生成

    Hibernate通过XML或注解方式将Java类与数据库表进行映射,使得开发者可以使用面向对象的方式来处理数据库。然而,手动编写这些映射文件可能会耗费大量时间,因此“Hibernate 映射文件自动生成”是一个非常实用的功能...

    用hibernate形式uuid的生成算法

    `UUIDHexGenerator`类通过结合时间、IP地址、JVM标识和序列号,生成了具有高唯一性的UUID,适用于需要确保标识符全局唯一性的场景,如分布式系统中的对象标识。这种基于时间序列和硬件信息的UUID生成策略,不仅能够...

    Hibernate电子书(全)

    在关系数据库中,集合类型的数据(如Set、List、Map)不能直接存储,而Hibernate提供了将这些集合类型映射到数据库中的机制,如使用`Set`和`Map`映射关联关系,这使得Java对象的集合属性可以直接与数据库中的记录...

    hibernate 英文文档

    - **命名策略的实现**:通过自定义命名策略来改变 Hibernate 生成表名和字段名的方式。 - **XML 配置文件**:提供了 XML 配置文件的示例,展示了如何使用 XML 文件来配置 Hibernate。 - **J2EE 应用服务器集成**: ...

    Hibernate ORM - 继承关联关系之union-subclass

    3. **标识符映射**:确保所有子类都使用相同的标识符生成策略,以便能够通过主键识别对象的类型。 4. **属性映射**:将子类特有的属性映射到对应的子表中。 5. **查询操作**:Hibernate提供了一些API和HQL...

    hibernate简单总结

    6. **标识符生成策略**:Hibernate提供了多种主键生成策略,如@TableGenerator、@SequenceGenerator、@GeneratedValue(IDENTITY、AUTO、SEQUENCE、TABLE),其中.AUTO策略依赖于数据库的自动增长功能,可能不适合...

    Hibernate面试题-详尽解析

    - **定义**: `native`是一种动态选择标识符生成策略的方式,它根据所使用的底层数据库系统自动选择最适合的生成器(如`identity`、`sequence`或`hilo`)。这种方式非常适合需要跨数据库平台的应用开发。 - **适用...

    Hibernate用UUID作为主键的Demo

    本教程将深入探讨如何在Hibernate中使用UUID(通用唯一识别码)作为实体类的主键。UUID是一种能确保全球范围内唯一性的标识符,其长度通常为32个字符的十六进制字符串。 ### 1. Hibernate简介 Hibernate是一个开源...

    hibernate-orm-3.3源码

    - Identifier:每个实体都有一个标识符(ID),用于在数据库中唯一识别该对象。 - Mapping:映射文件(.hbm.xml)或注解定义了对象字段与数据库列的对应关系。 四、查询语言 - HQL:Hibernate 查询语言,类似 SQL,...

    hibernate3.6 文档(pdf 格式)

    - **命名策略**:自定义 Hibernate 的默认命名策略,例如表名和列名的生成规则。 - **XML 配置文件**:详细说明如何使用 XML 文件配置 Hibernate。 #### 四、持久化类 - **简单的 POJO 示例**:通过实例展示如何...

    hibernate常见错误解决方案

    ### Hibernate常见错误解决方案 在开发基于Hibernate框架的应用程序时,我们经常会遇到各种各样...通过以上分析与解决方案,我们可以有效地识别和解决Hibernate中常见的异常问题,从而提高开发效率和应用程序的质量。

    hibernate_3.2_官方中文参考手册.

    Hibernate是一款开源的对象关系映射(ORM)框架,它能够将面向对象的Java应用程序与关系型数据库进行桥接,使得开发者可以使用面向对象的方式来进行数据库操作,而无需直接编写SQL语句。本章节将详细介绍如何通过...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    Hibernate3.2 中文文档.

    主键(@Id)是识别每个实体的唯一标识符,可以使用@IdGenerator定义生成策略。 4. **Session接口**:它是Hibernate的主要工作单元,负责对象的保存、加载和更新。它提供了事务管理和缓存管理的功能。 5. **Criteria...

    使用表的id生成

    在数据库表中,每个记录通常都有一个唯一的标识符,即主键,用于唯一地识别每条数据。在JPA中,有多种策略可以用来自动为实体生成主键。 1. **主键生成策略**: JPA提供了多种主键生成策略,如`AUTO`、`IDENTITY`...

Global site tag (gtag.js) - Google Analytics