`

JPA主键生成策略

 
阅读更多

JPA默认提供了四种主键生成策略。
(1) GeneratorType.AUTO: 容器自动生成
(2) GenerationType.IDENTITY : 使用数据库的自动增长字段生成,JPA容器将使用数据库的自增长字段为新增的

实体对象赋唯一值,这种情况下,需要数据库本身提供自增长字段属性,支持该属性的DB有:SQL Server、DB2、

MySQL、Derby等支持。

(3) GenerationType.SEQUENCE: 使用数据库的序列号为新增加的实体对象赋唯一值, 这种情况下需要数据库提供

对序列号的支持常用的数据库中,Oracle支持。

(4) GenerationType.TABLE : 使用数据库表的字段生成,表示使用数据库中指定表的某个字段记录实体对象的标识,

通过该字段的增长为新增加的实体对象赋唯一值

JPA是实现使用举例:
1. GeneratorType.AUTO

    (1) OpenJPA

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid")

    (2) Hibernate:Eclipse会提示错误,但是程序是可以运行的

    @Id
    @GenericGenerator(name = "test", strategy = "uuid")
    @GeneratedValue(generator = "test")

    说明:这中主键生成策略均跟实现有关系,不易于前移,推荐使用用:

    java.util.UUID  user.setUserId(UUID.randomUUID().toString());

2. GenerationType.IDENTITY

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long accountId;

    如果是在Derby数据库中,则需要定义字段

    USER_ID  BIGINT  NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1);

    而在MySQL中不需要。

3. GenerationType.TABLE

    (1) Hibernate: 需要创建生成主键的表

    @TableGenerator(name = "testId", table = "IDTABLE", 
                pkColumnName = "KEYID", valueColumnName = "KEYVALUE", pkColumnValue =  

    "TestUSER_ID")
    @GeneratedValue(strategy=GenerationType.TABLE, generator="testId")

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

    (2) JPA实现:数据库中没有该表将会自动生成

 

复合主键

 

分享到:
评论

相关推荐

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

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

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

    总结一下关于JPA的主键生成策略,JPA是用@GeneratedValue标记来注释的。一般的我把主键生成分成两大类。第一个就是简单的单字段主键类型,一个就是复杂的复合主键类型。我们分2种情况分别讨论。 第一种单字段主键...

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

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

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

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

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

    NULL 博文链接:https://1028826685.iteye.com/blog/1523349

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

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

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

    持久化类主键生成策略+例子 jpa 4种 hibernate 13种

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

    本资源为原创. 其中剖析了hibernate+JPA对主键的生成方式的分类,以及在真实项目中如何使用,并且剖析各种数据库间的主键序列(sequence)原理以及使用.

    尚硅谷JPA视频教程

    JPA视频_Table主键生成策略 · 7. JPA视频_EntityManager(1) · 8. JPA视频_EntityManager(2) · 9. JPA视频_EntityManager(3) · 10. JPA视频_EntityManager(4) · 11. JPA视频_EntityTransaction · 12. ...

    持久化对象的标准JPA

    基于JPA的Demo,包含关联(一对多等等),继承,主键(组合主键,主键生成策略),注解,基本类型的实现。

    第25章_JPA概述.

    29.1主键生成策略 29.2 复合主键 29.3嵌入式主键 29.4 一对一关系的配置和使用 29.5 多对一和一对多关系的配置和使用 29.6 多对多的关系 29.7 把查询的多个值封装成对象 29.8 批量更新和删除 29.9 使用存储过程 29....

    根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第6版)

    5、新增实体主键生成策略,可以配置手动生成主键也可以配置自动生成主键。 6、可以根据选择的标准模板不同自动生成相应扩展名的文件,也可以手动设置文件扩展名。 7、新增设置文件注释,并可以使用部分系统参数。...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N关联 411 10.5.5 双向1-1关联 414 10.5.6 双向1-N关联 417 10.5.7...

    Hibernate注解

    * name 表示该表主键生成策略名称,它被引用在@GeneratedValue中设置的“gernerator”值中 * sequenceName 表示生成策略用到的数据库序列名称。 * initialValue 表示主键初始值,默认为0. * allocationSize 每次主键...

    Hibernate实战(第2版 中文高清版)

     1.4.4 Hibernate、EJB 3和JPA简介   1.5 小结   第2章 启动项目   2.1 启动Hibernate项目   2.1.1 选择开发过程   2.1.2 建立项目   2.1.3 Hibernate配置和启动   2.1.4 运行和测试应用程序   2.2...

    Spring中文帮助文档

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    Spring API

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    Hibernate注释大全收藏

    @Id 注解可将实体Bean中某个属性定义为主键,使用@GenerateValue注解可以定义该标识符的生成策略。 • AUTO - 可以是 identity column, sequence 或者 table 类型,取决于不同底层的数据库 • TABLE - 使用table...

Global site tag (gtag.js) - Google Analytics