`

JPA主键策略

 
阅读更多

      在讲主键策略之前首先简单介绍一下JPA。

      JPA是一种java规范,而不是一种框架,而是一个ORM规范。JPA可以支持多种ORM框架,例如:hibernate,OpenJPA,TopLink,EclipseJPA等。JPA只是提供了统一的规范接口,最终实现由各个数据库厂商来实现。这样设计的目的是为了解决项目中切换ORM框架,数据库连接等所造成的成本。

 

       我们在用JPA开发的时候,经常会在实体类的ID加上@GeneratedValue注解,用于生成表的主键。

例如:

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private String id;

 

其中:strategy用于生命主键生成策略,JPA提供了四种主键生成的策略。

 

1.GenerationType.IDENTITY

        id自增长,数据库在新增一行数据的时候,自动给id赋值,类似于MySql新建表时,设计的列为auto_increment,常见的数据库基本上都支持该策略。

 

2.GenerationType.AUTO

         自动从其他三种策略中选择主键生成的策略,将主键生成的策略交给JPA来处理,JPA会根据不同的数据库选择合适的策略。

 

3.GenerationType.SEQUENCE

     使用序列的方式生成主键,例如:

@Id

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "testSeq")

@SequenceGenerator(initialValue = 1,name = "testSeq", sequenceName = "TEST_SEQUENCE")

private String id;

 

以上声明相当于创建了一个序列,create sequence TEST_SEQUENCE;

如果不指定序列生成器的名称,则使用厂商提供的默认序列生成器,比如Hibernate默认提供的序列名称为hibernate_sequence。

 

4.GenerationType.TABLE

        该策略利用数据库中的一个表来生成主键,可以不依赖于数据库的具体实现,可以实现在不同的数据库之间切换。

如果不指定表生成器,JPA厂商会使用默认的表,比如Hibernate在Oracle数据库上会默认使用表hibernate_sequence。

例子:

@Id

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "testSeq")

@TableGenerator(name ="PK_SEQ",table="SEQUENCE_TABLE",pkColumnName="SEQUENCE_NAME", valueColumnName  = "SEQUENCE_COUNT") 

private String id;

name属性表示表生成器的名称,table表示用哪个表来存储生成的主键,pkColumnName用来指定生成器表中的那一列来存储主键,valueColumnName 指定生成器表中列是用来存储最后生成的那个主键的值。

       

 

    

0
0
分享到:
评论

相关推荐

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

    JPA主键策略详解 JPA(Java Persistence API)是一个Java标准,用于对象关系映射(ORM)。在JPA中,主键策略是指生成主键的机制,用于标识数据库表中的每一行记录。在本文中,我们将详细讨论JPA主键策略的类型、...

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

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

    JPA主键生成策略

    只要1分就可获得JPA主键生成策略,很全的哦

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

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

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

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

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

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

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

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

    JPA联合主键

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

    JPA 联合主键

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

    JPA注解实现联合主键

    ### JPA注解实现联合主键 在关系型数据库中,单个字段作为主键的情况较为常见,但在某些场景下,我们需要使用多个字段共同作为主键来唯一标识表中的每一条记录,这就是所谓的“联合主键”。而在Java持久化框架...

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

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

    JPA中的联合主键

    在Java Persistence API (JPA) 中,联合主键(Composite Key)是指由两个或更多个字段共同组成的主键,这与单字段主键(Single Field Primary Key)相对。这种设计模式通常用于那些需要多个属性来唯一标识实体的情况...

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

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

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

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

    jpa例子jpajpa

    6. **懒加载(Lazy Loading)与即时加载(Eager Loading)**: JPA支持关联对象的懒加载和即时加载策略。懒加载意味着关联的对象只有在真正需要时才会被加载,而即时加载则会在加载主体对象时一起加载关联对象。 7. ...

    15_JPA详解_JPA中的联合主键.zip

    在JPA中,**联合主键(Composite Key)** 是指由两个或多个属性共同构成的主键,这与单个属性的简单主键相对。联合主键通常用于那些通过多个字段来唯一标识实体的情况。在关系数据库中,联合主键确保了表中每行数据...

    传智播客JPA学习笔记.pdf

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

    JPA 标注 JPA标签手册

    - `@GeneratedValue`:指定主键生成策略,如自动序列或UUID等。 - `@Embeddable`:用于表示可嵌入的实体类,可以包含在其他实体中。 - `@EmbeddedId`:当实体使用复合主键时,标识复合主键类。 - `@Inheritance`...

    基于jpa的一对一的主键测试.docx

    基于 JPA 的一对一主键测试 本文档介绍了如何使用 Java 持久层 API(JPA)实现一对一的主键测试。该测试涵盖了人员表和身份证表之间的一对一关系,使用了 JPA 的注解来定义实体类和关系。 实体类设计 在该测试中...

    JPA学习总结(五)--JPACompositePK联合主键

    在Java Persistence API (JPA) 中,主键是用于唯一标识数据库中实体对象的重要概念。在某些情况下,一个实体可能需要由多个字段共同构成主键,这时就需要使用联合主键,也就是`JPACompositePK`。这篇博客文章将深入...

Global site tag (gtag.js) - Google Analytics