`

JPA主键生成策略

 
阅读更多

写实体bean,映射的数据可以采用XML配置方式,也可以采用注解方式,在JPA中推荐大家用注解的方式,因为注解的方式开发应用效率是挺高的,   

  

  每个实体bean都要有个实体标识属性,这个实体标识属性主要用于在内存里面判断对象。通过@Id就可以定义实体标识。可以标识在属性的get方法前面,也可以标识在字段上面,通常我们更倾向于标识在属性的get方面上面。   

  如果我们希望采用数据库的id自增长的方式来生成主键值的话,这时候我们要用到一个注解@GeneratedValue,这注解里面有一些属性,其中一个是策略strategy,生成主键值的方案,JPA里没有Hibernate提供的那么多方案,它提供的方案有一下一些:看图。。   

  

1) AUTO: JPA自动选择合适的策略,是默认选项;   

2) IDENTITY:采用数据库ID自增长的方式来生成主键值,Oracle不支持这种方式;   

3) SEQUENCE:通过序列产生主键,通过@SequenceGenerator注解指定序列名,MySql不支持这种方式;   

4) TABLE:采用表生成方式来生成主键值,那怎么样生成呢?很简单,表里面通常有两个字段,第一个字段是给它一个名称(就是个列名而已),第二个字段专门用来累加用的,就是说没访问一次这个表呢,那么第二个字段就会累加1,不断累加。就是说你们要得到这个主键值的话,访问这个表,然后update这个表的这个字段,把它累加1之后,然后再把这个值取出来作为主键,再给他赋进去,表生成就是这样。        

 

IDENTITY和SEQUENCE这两种生成方案通不通用啊?对所有数据库。    

Oracle数据库默认情况下,不能支持用id自增长方式来生成主键值;   

mysql在默认情况下不能支持SEQUENCE序列的方式来生成主键值,所以我们一定要注意我们使用的数据库。   

TABLE表生成方式才是通用的,但是这种方式效率并不高,   

如果我们开发的应用,我们不可以预测用户到底使用哪种数据库,那么这个时候应该设为哪个值呢?答案是AUTO,就是说由持久化实现产品,来根据你使用的方言来决定它采用的主键值的生成方式,到底是IDENTITY?还是SEQUENCE?还是TABLE? 如果用的是Hibernate,那么它会用IDENTITY这种生成方式来生成主键值。   

  注意:如果我们把策略strategy设置成@GeneratedValue(strategy=GenerationType.AUTO)的话,AUTO本身就是策略的默认值,我们可以省略掉,就是说简单写成这样@GeneratedValue   

分享到:
评论

相关推荐

    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通过`@...

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

    **JPA主键生成策略** JPA提供了多种主键生成策略,以下是一些常见的策略: 1. **IDENTITY**:数据库负责生成主键,如MySQL的`AUTO_INCREMENT`。 2. **SEQUENCE**:使用数据库序列生成主键,适用于支持序列的数据库...

    04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略

    【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...

    JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi

    JPA用于整合现有的ORM技术,可以简化现有Java EE和Java SE应用对象持久化的开发工作,实现ORM的统一。JPA详解视频教程 第4讲 第一个JPA实例与JPA主键生成策略.avi

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

    ### JPA主键生成策略 1. **`GenerationType.AUTO`**:这是最常用的策略,具体的生成方式由数据库供应商决定,通常对应于自动增长字段,例如在MySQL中的`AUTO_INCREMENT`。 2. **`GenerationType.IDENTITY`**:此...

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

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

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

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

    传智播客JPA学习笔记.pdf

    第一个JPA实例与JPA主键生成策略** 在JPA中,主键的生成策略可以通过@Id注解和@GeneratedValue注解进行设置,如AUTO、IDENTITY、SEQUENCE、TABLE等,不同的策略对应不同的数据库系统主键生成方式。 **5. 日期_枚举...

    传智播客JPA学习笔记修改免积分版

    #### 五、JPA主键生成策略 - **自动生成策略**: - 如 AUTO, SEQUENCE, TABLE, IDENTITY 等,提供了多种方式来自动生成实体对象的主键值。 - **手动指定策略**: - 开发者可以根据需求选择合适的主键生成机制,如...

    JPA 联合主键

    JPA提供了多种主键生成策略,如`GenerationType.AUTO`、`GenerationType.IDENTITY`等,但这些策略大多适用于单个主键字段。对于联合主键,通常需要手动设置主键值,因为没有自动化的生成机制。 ### 5. 联合主键与...

    JPA联合主键

    - 在操作联合主键的实体时,需要特别注意主键的生成策略,因为JPA不会自动为联合主键生成值,除非明确指定。 ### 实践应用 在实际开发中,联合主键常常出现在需要多对多关联的场景,例如上述的`ProductCategory`...

    JPA_由数据库生成JavaBean

    - 通过使用JPA的注解,如`@Entity`(表示这是一个实体类)、`@Table`(指定数据库表名)、`@Id`(标识主键)、`@GeneratedValue`(主键生成策略)等,可以对JavaBean进行更精细的配置。 5. **使用生成的JavaBean**...

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

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

    openjpa实体标识的生成策略

    在OpenJPA中,实体标识(Entity Identifier)的生成策略是数据持久化过程中不可或缺的一部分,因为确保实体的唯一性对于数据库的正确性和一致性至关重要。OpenJPA提供了四种不同的策略来生成实体标识,使得开发者...

    hibernate数据持久化组件

    ##### 2.7 JPA 主键生成策略 - **AUTO**:由实现决定。 - **IDENTITY**:由数据库自动生成。 - **SEQUENCE**:基于数据库序列生成。 - **TABLE**:通过查询特定表来获取主键值。 通过以上介绍,可以看出 Hibernate ...

    JPA中的联合主键

    联合主键的生成策略可以是自动生成(如`GenerationType.IDENTITY`),也可以是用户手动赋值。对于手动赋值,通常在创建新实体时,需要同时设置所有主键字段。如果希望使用自动生成,可能需要结合`@GeneratedValue`...

    JAVA(SpringBoot) JPA 代码生成工具

    使用@Id注解定义主键字段,@GeneratedValue可以指定主键生成策略。例如: ```java @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String ...

    15_传智播客JPA详解_JPA中的联合主键

    - 当使用联合主键时,JPA默认不会生成主键值,通常需要自定义生成策略或手动设置主键值。 - 在保存或更新实体时,确保联合主键的所有字段都有值,否则会抛出异常。 理解并正确使用JPA中的联合主键对于开发复杂的...

Global site tag (gtag.js) - Google Analytics