`
erichua
  • 浏览: 516770 次
  • 性别: Icon_minigender_2
  • 来自: 远方
社区版块
存档分类
最新评论

Hibernate读书笔记--@ID的配置

    博客分类:
  • JAVA
阅读更多

 

原原英文:

 

increment
generates identifiers of type longshort  or int  that are unique only when no other process is inserting data into the same table. Do not use in a cluster.

identity
supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type longshort  or int .

sequence
uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type longshort  or int

hilo
uses a hi/lo algorithm to efficiently generate identifiers of type longshort  or int , given a table and column (by default hibernate_unique_key  andnext_hi  respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database.
seqhilo
uses a hi/lo algorithm to efficiently generate identifiers of type longshort  or int , given a named database sequence.

uuid
uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32.
guid
uses a database-generated GUID string on MS SQL Server and MySQL.
native
picks identitysequence  or hilo  depending upon the capabilities of the underlying database.
assigned
lets the application to assign an identifier to the object before save()  is called. This is the default strategy if no <generator>  element is specified.
select
retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value.
foreign
uses the identifier of another associated object. Usually used in conjunction with a <one-to-one>  primary key association.
sequence-identity
a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers.

中文理解

Ø  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”       

  使用另外一个相关联的对象的标识符作为主键。

 

 

常用example

<!----><!----> <!---->

1. Hi/lo

Hi/lo hilo seqhilo2 种可选择的方法, hilo 需要一个特殊的数据表来保存 hi 值。而 seqhilo2 使用的是类似与 Oracle-style sequence (需要数据库支持)

<id name="id" type="long" column="cat_id">

        <generator class="hilo">

                <param name="table">hi_value</param>

                <param name="column">next_value</param>

                <param name="max_lo">100</param>

        </generator>

</id>

<id name="id" type="long" column="cat_id">

        <generator class="seqhilo">

                <param name="sequence">hi_value</param>

                <param name="max_lo">100</param>

        </generator>

</id>

不幸的是你不能在使用自己的 Connection   Hibernate 时候使用 hilo 。例如 jta 的时候。当 Hibernate application server datasource 获得 connection 的时候,你必须合理配置 hibernate.transaction.manager_lookup_class .

2. UUID

UUID 包括: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM) 但它不支持 MAC 地址或 memory address ,在使用 UUID 的时候,不要使用 JNI

3 Identity sequences

有些数据库支持 identity 的,如 (DB2, MySQL, Sybase, MS SQL) ,你就可以使用 Identity 生成 ID 。而如果数据库支持 sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) 你就可以使用 sequence

<id name="id" type="long" column="person_id">

        <generator class="sequence">

                <param name="sequence">person_id_sequence</param>

        </generator>

</id>

<id name="id" type="long" column="person_id" unsaved-value="0">

        <generator class="identity"/>

</id>

有时候我们可以更加灵活一些,为了支持跨平台的我们可以直接使用 native 去让系统自动选择 id 生成, hibernate 可以根据数据库的兼容性自动选择 identity sequence     hilo  


4 .Mysql 的auto increate 字段的@id

    a). 数据库中一定要确定 "Id " 是"Auto Increase"

    b).@Id
        @GeneratedValue(generator = "system-increment")
        @GenericGenerator(name = "system-increment", strategy = "increment")
        private long id ;

 

评论

相关推荐

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    hibernate-release-5.2.10

    1. **实体管理**:Hibernate通过@Entity注解将Java类映射为数据库表,通过@Id指定主键,使得对象可以直接对应到数据库记录。 2. **配置**:Hibernate的配置文件(如hibernate.cfg.xml)中需要设置数据库连接信息、...

    hibernate-commons-annotations-5.0.1.Final.jar

    HCA的核心在于提供了一系列的注解,如`@Entity`、`@Table`、`@Column`、`@Id`等,这些注解用于标记Java类和类的成员,以便于Hibernate理解如何将它们映射到数据库中的表和字段。例如,`@Entity`注解标记一个类为实体...

    hibernate-distribution-3.3.1.GA

    很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    - **配置**: 开发者需要在pom.xml或build.gradle文件中添加`hibernate-jpa-2.1-api-1.0.0.final.jar`依赖,然后在应用配置中指定Hibernate作为JPA提供商。 - **实体类**: 使用@Entity注解标记Java类为JPA实体,并...

    hibernate-annotations-3.4.0.GA.rar

    例如,`@Entity`注解表示一个类作为数据库中的表,`@Table`定义表名,`@Id`标记主键字段。 2. **实体映射** - `@Entity`: 定义一个Java类为数据库实体,每个实例对应数据库的一行记录。 - `@Table`: 指定实体对应...

    hibernate-validator-5.0.0.CR2-dist.zip

    使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...

    hibernate-mapping-3.0.dtd

    hibernate-mapping-3.0.dtd 配置后,就会在xml中进行提示

    Hibernate 离线的配置方法(hibernate-mapping-3.0.dtd)

    因为Hibernate在读出hbm.xml文件时需要通过网络读取到hibernate-mapping-3.0.dtd 文件。 如果没有网络不能正常工作。 所以提供上述文件。 以及hibernate-mapping-3.0.dtd,hibernate-configuration-3.0.dtd提供下载...

    hibernate-annotations-3.4.0.GA and hibernate-entitymanager-3.4.0.GA

    本篇将详细探讨`hibernate-annotations-3.4.0.GA`和`hibernate-entitymanager-3.4.0.GA`这两个版本中的核心知识点,尤其是它们在注释和枚举映射方面的应用。 首先,`hibernate-annotations`是Hibernate提供的一套...

    hibernate-commons-annotations-4.0.1.Final.jar

    hibernate-commons-annotations-4.0.1.Final.jar

    hibernate-core-5.0.11.Final.jar

    4. **Entity**:实体类是数据库表的映射,通过`@Entity`注解标记,其属性对应表字段,通过`@Id`定义主键。 5. **Query**:提供了HQL(Hibernate Query Language)和Criteria API,允许以面向对象的方式执行数据库...

    hibernate-release-4.1.4

    【标题】"hibernate-release-4.1.4" 是Hibernate框架的一个版本发布,具体为4.1.4.Final。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发人员在处理数据库时使用面向对象的概念,极大地简化了数据库...

    hibernate-common-annotations.jar

    《hibernate-common-annotations.jar:Hibernate ORM框架中的核心注解库详解》 在Java世界里,ORM(Object-Relational Mapping)框架是连接数据库与应用程序的重要桥梁,而Hibernate作为其中的佼佼者,深受广大...

    hibernate-release-5.0.7.Final的所有jar包

    在这个`hibernate-release-5.0.7.Final`版本中,包含了所有相关的jar包,为开发者提供了一个完整的Hibernate ORM解决方案。 在Java开发中,jar(Java Archive)包是Java类库的打包形式,它包含了一系列的类文件和...

    hibernate学习笔记-01helloword

    1. **环境搭建**:首先,我们需要配置Hibernate的核心库,包括hibernate-core、junit等依赖,通过Maven或Gradle等构建工具添加到项目中。 2. **实体类创建**:在Java中定义一个实体类,例如User,它代表数据库中的...

    hibernate-release-4.2.4核心jar包

    《Hibernate核心库解析:深入理解hibernate-release-4.2.4_jar.zip》 Hibernate,作为一款广泛使用的Java对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者无需直接编写SQL,就能实现对数据库的操作。...

Global site tag (gtag.js) - Google Analytics