`
sefcertyu
  • 浏览: 248057 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JPA ID生成策略

阅读更多

数据的唯一性是很平常的要求,但是如果框架不能提供相关的控制而由程序员完全控制是很危险的,在JPA中,有下面四种策略。
A.容器自动生成---GeneratorType.AUTO 
由JPA自动生成
B.使用数据库的自动增长字段生成---GenerationType.IDENTITY
JPA 容器将使用数据库的自增长字段为新增加的实体对象赋唯一值。这种情况下需要数据库提供对自增长字段的支持,SQL Server、MySQL、DB2、Derby等支持。
C.根据数据库序列号(Sequence)生成 ---GenerationType.SEQUENCE
表示使用数据库的序列号为新增加的实体对象赋唯一值。这种情况下需要数据库提供对序列号的支持常用的数据库中,Oracle支持。
D.使用数据库表的字段生成---GenerationType.TABLE
表示使用数据库中指定表的某个字段记录实体对象的标识,通过该字段的增长为新增加的实体对象赋唯一值

比较特殊的地方
1. 使用UUID(两个不同实现版本Hibernate和OpenJPA有点不同)
  OpenJPA
   @GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid")
  Hibernate(Eclipse会提示错误,但是程序是可以运行的)
   @GenericGenerator(name = "test", strategy = "uuid")
   @GeneratedValue(generator = "test")
  
  其实这两种办法我感觉都不是特别好,因为他们跟实现有关系,将来如果要迁移的话会比较麻烦,所以可以直接用java.util.UUID
   user.setUserId(UUID.randomUUID().toString());

2.使用@GeneratedValue(strategy=GenerationType.IDENTITY)
  需要在数据库(Derby)中这样定义字段
  USER_ID  BIGINT  NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)

3.如果使用数据库表的字段生成---GenerationType.TABLE
  对于Hibernate,需要创建生成主键的表,但是OpenJPA不需要,如果没有会自动生成。
  代码如下:
   @TableGenerator(name = "test111", table = "IDTABLE",
                pkColumnName = "KEYID", valueColumnName = "KEYVALUE", pkColumnValue = "TestUSER_ID")
   @GeneratedValue(strategy=GenerationType.TABLE, generator="test111")

   CREATE TABLE IDTABLE (
    KEYID VARCHAR(255) NOT NULL,
    KEYVALUE BIGINT,
    PRIMARY KEY (KEYID)
   )

 

0
1
分享到:
评论

相关推荐

    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实体和设置主键生成策略。继续深入学习,你将能够利用JPA的强大功能,如查询语言(JPQL)、级联操作、事务管理等,来更高效地进行数据库操作。

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

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

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

    而Hibernate提供了跨数据库的主键生成策略,例如`native`策略,它会根据底层数据库自动选择合适的主键生成方式(如MySQL的自动增长ID或Oracle的序列)。 在JPA中,通过`@GenericGenerator`注解可以定义主键的生成...

    java自动生成id策略

    在Java编程中,自动生成ID是一项常见的需求,特别是在数据库记录、分布式系统节点标识等领域。"java自动生成id策略"指的是设计并实现一种机制,确保...实际应用中,还需要根据业务需求和系统规模选择适合的ID生成策略。

    openjpa实体标识的生成策略

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

    JPA_由数据库生成JavaBean

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

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

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

    JAVA(SpringBoot) JPA 代码生成工具

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

    使用表的id生成

    标题“使用表的id生成”涉及的是数据库管理和Java Persistence API (JPA) 中的一个关键概念:主键生成策略。在数据库表中,每个记录通常都有一个唯一的标识符,即主键,用于唯一地识别每条数据。在JPA中,有多种策略...

    JPA注解 和hibernate 建表

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

    JPA的POJO生成

    JPA提供了多种方式来指定字段与数据库表之间的映射,如`@Column`注解用于指定列名、`@Table`用于指定表名、`@GeneratedValue`用于主键生成策略等。例如: ```java @Entity @Table(name = "USERS") public class ...

    HIbernate Jpa 生成entities

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

    Spring JPA 配置类包集合 方便大家使用

    @Id注解用于标识主键,@GeneratedValue则用于指定主键生成策略。例如,如果你使用的是自动增长的主键,可以设置@GeneratedValue(strategy=GenerationType.AUTO)。 3. **PersistenceContext**:Spring JPA使用...

    JPA的Id注解.docx

    JPA提供了四种主要的生成策略: - **GenerationType.TABLE**:使用一个独立的数据库表来生成主键。 - **GenerationType.SEQUENCE**:基于数据库序列生成主键,比如在Oracle数据库中。 - **GenerationType.IDENTITY*...

    JPA教程JPA教程JPA教程

    实体类中的字段对应于表中的列,通过注解如@Id、@GeneratedValue等来指定主键和生成策略。JPA的核心接口是EntityManager,它是与数据库交互的主要接口,负责保存、更新和删除实体,以及执行查询操作。 JPA的查询...

    Spring Data Jpa 自动生成表结构的方法示例

    @GenericGenerator 注解用于指定主键生成策略。在上面的示例代码中,我们使用了 @GenericGenerator(name = "idGenerator", strategy = "uuid") 来指定使用 UUID 生成主键。 6. 使用 @GeneratedValue 注解 @...

    JPA 标注 JPA标签手册

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

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

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

Global site tag (gtag.js) - Google Analytics