JPA的主键生成策略
数据的唯一性是很平常的要求,但是如果框架不能提供相关的控制而由程序员完全控制是很危险的,在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)
)
(注:该文为引用,原文地址http://blog.csdn.net/fantian830211/archive/2009/09/11/4544117.aspx)
转载于:https://www.cnblogs.com/heidsoft/p/3836636.html
JPA的主键生成策略相关推荐
- jpa 根据主键生成策略获取id_JPA主键生成策略
@GeneratedValue: 为一个实体类生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键).它有两个属性,分别是strategy和generator. genera ...
- jpa 根据主键生成策略获取id_如何在使用JPA和Hibernate时选择id生成策略
MMTTMM 该API文档都对这个很清楚.所有生成器都实现了org.hibernate.id.IdentifierGenerator接口.这是一个非常简单的界面.一些应用程序可以选择提供自己的专用实现 ...
- JPA实体注解与hibernate主键生成策略
JPA实体注解与hibernate主键生成策略 用hibernate注解开发项目,对于主键的生成策略有些模糊,下面是从新浪网里面看到的一篇关于hibernate注解以及主键生成策略的文章,值得一看: ...
- jpa基于按annotation的hibernate主键生成策略
JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hi ...
- JPA 配置UUID主键生成策略
我们知道oracle 有一种主键生成策略是UUID, 用于生成一个不重复的字符串做为主键. 使用UUID 作为主键可以防止恶意猜测主键, 对数据做非法操作. Hibernate 对此也提供了支持, 会 ...
- 基于按annotation的hibernate主键生成策略
这里讨论代理主键,业务主键(比如说复合键等)这里不讨论. 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id ...
- JavaEE持久层框架对比与hibernate主键生成策略总结
一.持久层框架对比 ORM框架:即对象关系映射.它把数据库表映射到pojo类,然后通过对类的操作来实现对数据库的增删改查,sql语句自动生成. 对于代码开发者来说,就是在代码里先创建数据库连接对象,然 ...
- hibernate 7大主键生成策略详解与对象状态
一:代理主键_主键自增 1.identity 1.采用底层数据库本身提供的主键生成标识符,条件是数据库支持自动增长数据类型 2.该生成器要求在数据库中把主键定义成为自增长类型.适用于代理主键 2.in ...
- Hibernate各种主键生成策略与配置详解 - 真的很详细啊!!
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
最新文章
- 用flood测试web服务器响应时间,用Flood测试Web服务器响应时间(1)
- 意想不到的JavaScript(每日一题1)
- electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记
- django 表单html5,我们如何在django管理表单中添加动态html5数据属性
- 为什么Python 4.0不会像Python 3.0
- 每日英语:Is austerity good for your health?
- 一文读懂Redis6的--bigkeys选项源码以及redis-bigkey-online项目介绍
- 被国人误传了几千年的八句俗语
- 计算机ps屏幕背景颜色怎么换,win7系统ps背景颜色怎么换?七步教您轻松处理
- 关于EPCS系列芯片的说明
- python网站数据监测_python 网站数据监控
- 图像分割-连通区域分析
- 2021年软考信息安全工程师下午真题(考生回忆版)
- 每日三思:微信小程序多层级父子组件如何在子组件滚动加载
- 计算机考研总共多少分,考研计算机要过多少分
- 1213:八皇后问题1700:八皇后问题
- 这5个“减压”小妙招,在你负重前行的路上会用到!
- 基于eBPF的云原生可观测性开源工具Kindling之Kindling-agent 性能测试评估
- 中电标协提出并归口:《政务APP评价指标》团体标准开启制订工作
- 数据结构003:有效的数独
热门文章
- java.lang.NoClassDefFoundError: weblogic/rmi/extensions/DisconnectListener
- idea使用过程中的坑
- vue2.0:(六)、移动端像素border的实现和整合引入less文件
- thinkphp 模板 in
- linux基础命令-查看系统状态-free -m以及top命令详解
- width 、 height 与 box-sizing : border-box ,content-box 的关系
- 错误记录:发送广播是报空指针
- 关于spring注入
- azure centos 7安装mariadb
- Windows Mobile入门