`
jacktea
  • 浏览: 6993 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

JPA hibernate 主键生成策略

    博客分类:
  • J2EE
 
阅读更多

hibernate加jpa自带一共14种。

1.native

@Id
@GeneratedValue(generator = "gen")     
@GenericGenerator(name = "gen", strategy = "native")

 或

@Id
@GeneratedValue(strategy=GenerationType.AUTO)

 

2.table :  org.hibernate.id.enhanced.TableGenerator

 

@Id
@GeneratedValue(strategy=GenerationType.TABLE, generator="empGen")
@TableGenerator(
            name="empGen", 
            table="ID_GEN", 
            pkColumnName="GEN_KEY", 
            valueColumnName="GEN_VALUE", 
            pkColumnValue="EMP_ID", 
            allocationSize=1)
public int id;

 

3.uuid : org.hibernate.id.UUIDHexGenerator

最高生成36位长唯一字符串(加上分隔符),默认32位

@Id  
@GeneratedValue(generator = "gen")       
@GenericGenerator(
	name = "gen", 
	strategy = "uuid",
	parameters={
		//@Parameter(name="separator",value="自定义分隔符,长度1位")	
})
private String id;

 

4.hilo : org.hibernate.id.TableHiLoGenerator

 

@Id
@GeneratedValue(generator="gen")
@GenericGenerator(
	name="gen",
	strategy="hilo",
	parameters={	
		//@Parameter(name="table",value="hibernate_unique_key"),   
		//@Parameter(name="column",value="next_hi"),
		//@Parameter(name="schema",value="schema"),
		//@Parameter(name="catalog",value="catalog"),
		//@Parameter(name="max_lo",value="20")
	})
private int id;

 注释部分可以做相应的修改

5.assigned : org.hibernate.id.Assigned 

 

@Id
private int id;

 

6.identity : org.hibernate.id.IdentityGenerator

 

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;

 

7.select : org.hibernate.id.SelectGenerator

8.sequence : org.hibernate.id.SequenceGenerator

@Id
@GeneratedValue(generator="gen")
@GenericGenerator(
	name="gen",
	strategy="sequence",
	parameters={
		//@Parameter(name="sequence",value="hibernate_sequence"),
		//@Parameter(name="parameters",value=""),
		//@Parameter(name="schema",value=""),
		//@Parameter(name="catalog",value="")
})
private int id;

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private int id;

支持DB2.H2.HSQL.Informix.Ingres.Interbase.Mckoi.Mimer.Oracle.Postgre.RDMSOS2200.SAPDB.TimesTen

 

9.seqhilo : org.hibernate.id.SequenceHiLoGenerator

 

@Id
@GeneratedValue(generator="gen")
@GenericGenerator(
	name="gen",
	strategy="seqhilo",
	parameters={
		//@Parameter(name="sequence",value="hibernate_sequence"),
		//@Parameter(name="parameters",value=""),
		//@Parameter(name="schema",value=""),
		//@Parameter(name="catalog",value=""),
		//@Parameter(name="max_lo",value="20")
})
private int id;

支持DB2.H2.HSQL.Informix.Ingres.Interbase.Mckoi.Mimer.Oracle.Postgre.RDMSOS2200.SAPDB.TimesTen

 

10.increment : org.hibernate.id.IncrementGenerator

 

@Entity
@Table(name = "id_increment_gen")
public class IncrementGen {

	
	@Id
	@GeneratedValue(generator="gen")
	@GenericGenerator(
		name="gen",
		strategy="increment",
		parameters={
			@Parameter(name="tables",value="id_increment_gen"),
			//@Parameter(name="identity_tables",value="id_increment_gen"),
			@Parameter(name="column",value="id"),
			//@Parameter(name="target_column",value="id"),
			//@Parameter(name="schema",value=""),
			//@Parameter(name="catalog",value="")
	})
	private int id;
   其中tables参数和identity_tables参数互斥,tables参数优先。column参数和target_column参数互斥,   column参数优先,支持多表,以","分隔,会生成类似如下的语句:

 

 

select max (ids_.id) from ( select id from id_increment_gen ) ids_
 多表时为:

 

select max (ids_.id) from ( select id from id_increment_gen1 union select id from id_increment_gen2 ) ids_

 

11.foreign : org.hibernate.id. ForeignGenerator 

12.guid : org.hibernate.id. GUIDGenerator

@Id
@GeneratedValue(generator = "gen")     
@GenericGenerator(name = "gen", strategy = "guid")
private String id;

 支持mysql,oracle,sybase

 

13.uuid.hex : org.hibernate.id.UUIDHexGenerator  // uuid.hex is deprecated

14.sequence-identity : org.hibernate.id.SequenceIdentityGenerator

15.自定义

可同时实现接口org.hibernate.id.IdentifierGeneratororg.hibernate.id.Configurable

@Id
@GeneratedValue(generator = "gen")     
@GenericGenerator(name = "gen", strategy = "xg.CustGenerator")
private String id;

 strategy填写具体类名 

 

分享到:
评论

相关推荐

    JPA环境搭建及JPA实例与JPA主键生成策略

    通过以上步骤,你就成功地搭建了JPA环境,并理解了如何创建JPA实体和设置主键生成策略。继续深入学习,你将能够利用JPA的强大功能,如查询语言(JPQL)、级联操作、事务管理等,来更高效地进行数据库操作。

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

    本压缩包文件"04_JPA详解_第一个JPA实例与JPA主键生成策略.zip"包含了关于如何在实际项目中运用JPA,以及理解JPA主键生成策略的详细教程。 ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,...

    JPA学习笔记-EJB-03JPA主键生成策略总结

    ### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...

    持久化类主键生成策略+例子

    ### Hibernate主键生成策略 1. **`native`**:类似于JPA的`GenerationType.AUTO`,根据底层数据库选择合适的生成策略。 2. **`identity`**:相当于JPA的`GenerationType.IDENTITY`,适合自动增长主键的数据库。 3...

    真实项目中关于主键生成方式的剖析(JPA)

    总的来说,理解并灵活运用JPA和Hibernate的主键生成策略,结合不同数据库的特性,是确保项目数据一致性和可移植性的关键。合理选择和配置主键生成方式,可以帮助我们优化数据库性能,同时保证数据的完整性。在实际...

    JPA主键策略(针对数据库自增字段重置后无效检查项)

    seqhilo是一种通过hilo算法实现的主键生成策略,但是主键历史保存在Sequence中。这种策略适用于支持Sequence的数据库,如Oracle。 increment increment是一种插入数据的时候hibernate会给主键添加一个自增的主键的...

    JPA注解 和hibernate 建表

    * @GeneratedValue:标注该实体Bean的主键自动生成策略 这些注解可以帮助JPA provider(例如Hibernate)生成对应的数据库表结构和SQL语句。 三、Hibernate概述 Hibernate是一个基于JPA规范的ORM(Object-...

    HIbernate Jpa 生成entities

    - `@GeneratedValue`: 控制主键的生成策略,如自增、UUID等。 - `@Column`: 定义字段与数据库列的映射,可设置长度、是否允许为空等属性。 - `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 描述实体...

    spring mvc 与JPA/Hibernate的整合示例

    同时,使用`@Table`指定表名,`@Id`标记主键,`@GeneratedValue`定义主键生成策略。 最后,在控制器层,使用`@RestController`或`@Controller`注解定义控制器,通过`@RequestMapping`和`@GetMapping`等处理HTTP请求...

    hibernate-jpa.jar

    1. **实体注解**:如@Entity、@Table、@Id、@GeneratedValue等,这些注解用于标记Java类为实体,并指定其与数据库表的关系,以及主键的生成策略。 2. **查询语言**:Hibernate支持JPQL(Java Persistence Query ...

    springboot利用jpa连接hibernate

    同时,使用`@Table`指定表名,`@Id`标识主键字段,`@GeneratedValue`处理主键生成策略,如自增。 ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence....

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    - `@GeneratedValue`:用于自动生成主键值,支持多种策略如IDENTITY、SEQUENCE、TABLE等。 - `@Column`:定义实体属性与数据库列的映射,可以设置列名、长度、是否允许为空等属性。 - `@OneToMany`, `@ManyToOne`, `...

    Spring集成Jpa(Hibernate实现)

    这些类通常会使用`@Entity`注解,并且属性使用`@Id`(主键)、`@GeneratedValue`(主键生成策略)等注解进行标注。 7. **Repository接口**:Spring Data JPA允许我们创建基于接口的DAO,只需定义基本的CRUD操作接口...

    hibernate+jpa注解实现最简单的增删改查

    这里`@Entity`表示这是一个JPA实体,`@Table`指定对应的数据库表名,`@Id`定义主键,`@GeneratedValue`定义主键生成策略,`@Column`定义字段映射到表的列。 3. **Repository接口** 创建一个继承自JpaRepository的...

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

    - 为了确保一对一关系的唯一性,通常其中一个实体的主键会作为另一个实体的外键,且两者的主键生成策略应保持一致。 - 考虑到性能,避免在查询时加载不必要的关联对象,可以使用懒加载(`fetch = FetchType.LAZY`)...

    基于hibernate3.6的jpa例子

    属性则使用`@Id`(主键)、`@GeneratedValue`(自动生成策略)等注解进行映射。 配置JPA的核心是`persistence.xml`文件,它位于`META-INF`目录下。在这个文件中,我们可以定义数据源、指定Hibernate为JPA提供者、...

    hibernate自动生成

    自动生成的Entity类通常包含属性(对应表的字段)和getter/setter方法,有时还会包含一些特定的Hibernate注解,如@Id(主键)和@GeneratedValue(主键生成策略)。 2. **映射文件(Mapping Files)**:在传统的...

    根据hibernate反向生成数据库的java代码

    例如,@Entity表示这个类是一个持久化实体,@Table注解指定对应的数据库表,@GeneratedValue用于控制主键的生成策略。 5. Hibernate配置文件: 逆向工程也会生成hibernate.cfg.xml文件,这个文件包含了数据库连接...

    基于HibernateJPA最新案例

    例如,`@Entity`标记一个类为实体,`@Table`定义映射的数据库表,`@Id`指定主键字段,`@GeneratedValue`管理主键生成策略。 持久化单元配置文件(Persistence.xml)定义了数据源、实体类以及持久化策略。在...

    springboot集成jpa代码,自动生成表

    `@Id`表示主键,`@GeneratedValue`定义主键生成策略,这里使用了数据库自增策略。 4. **创建Repository接口** Spring Data JPA允许我们通过接口来操作数据库,无需编写SQL。创建一个继承`JpaRepository`的接口: ...

Global site tag (gtag.js) - Google Analytics