JPA主键策略
JPA 自带的主键策略有 4 种,在枚举 javax.persistence.GenerationType 中,分别是:TABLE、SEQUENCE、IDENTITY、AUTO。
TABLE:
通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。不同的JPA实现商生成的表名是不同的,如OpenJPA生成openjpa_sequence_table表,Hibernate生成一个hibernate_sequences表,而TopLink则生成sequence表。这些表都具有一个序列名和对应值两个字段,如SEQ_NAME和SEQ_COUNT。
SEQUENCE
表示使用数据库的序列为新增加的实体对象赋唯一值。这种情况下需要数据库提供对序列的支持常用的数据库中,Oracle支持,MySQL不支持这种方式。
IDENTITY
JPA 容器将使用数据库的自增长字段为新增加的实体对象赋唯一值。这种情况下需要数据库提供对自增长字段的支持,SQL Server、MySQL、DB2、Derby等支持。数据库在insert时分配标识值。Oracle不支持这种方式。
AUTO
由JPA自动生成,默认,委托JPA实现负责产生字段值。JPA会自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedValue(strategy=GenerationType.AUTO)。
如果使用Hibernate对JPA的实现,可以使用Hibernate对主键生成策略的扩展,通过Hibernate的@GenericGenerator实现。
示例:
|
1
2
3
4
5
6
7
|
@Id//用generator属性指定要使用的策略生成器。@GeneratedValue(generator = "system-uuid")//声明一个策略通用生成器,name为”system-uuid”,策略strategy为”uuid”。@GenericGenerator(name = "system-uuid", strategy = "uuid")@Column(name="uuid", length=32)private String uuid; |
JPA主键策略的更多相关文章
- Spring boot JPA 用自定义主键策略 生成自定义主键ID
最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...
- JPA主键生成策略
@GeneratedValue: 为一个实体类生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键).它有两个属性,分别是strategy和generator. genera ...
- Spring JPA 主键
JPA主键生成器和主键生成策略 JPA中创建实体时,需要声明实体的主键及其主键生成策略.我们有一个实体类叫做Email,其主键上声明如下: @Id @Column(name = "EMAIL ...
- MP支持的主键策略
MP 支持多种主键策略 默认是推特的“” 雪花算法“” ,也可以设置其他策略下面我演示主键策略使用 MP的主键定义在一个一个枚举类中 源码如下 public enum IdType { AUTO(0) ...
- 主键策略+mybayisPlus自动增长
主键策略: 1.自动增长 有一点小缺陷:例如当一张表里的数据过于庞大时我们会进行分表操作,若是用自动增长策略,那么除了第一张表外的每一张表都必须知道上一张的表的的最后ID值.这个操作便会造成效率的变低 ...
- Mybatis-Plus默认主键策略导致自动生成19位长度主键id的坑
原创/朱季谦 某天检查一位离职同事写的代码,发现其对应表虽然设置了AUTO_INCREMENT自增,但页面新增功能生成的数据主键id很诡异,长度达到了19位,且不是从1开始递增的-- 我检查了一下,发 ...
- MybatisPlus生成主键策略方法
MybatisPlus生成主键策略方法 全局id生成策略[因为是全局id所以不推荐] SpringBoot集成Mybatis-Plus 在yaml配置文件中添加MP配置 mybatis-plus: g ...
- JPA学习---第四节:JPA实例与JPA主键生成策略
1.编写实体类,代码如下: package learn.jpa.bean; import javax.persistence.Entity; import javax.persistence.Gene ...
- hibernate(2) —— 主键策略
框架提供了三种主键生成方式,一种是由用户自己维护,一种是由hibernate框架维护,另一种是由数据库维护. 自己维护就是在插入数据的时候,一定要指定主键的值,否则会出错,如果由框架维护和由数据库维护 ...
随机推荐
- spring的组成
① Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能 SpringContext:ApplicationContext,扩展核心容器,提供 ...
- Android开发经验记录
一. 代码规范 定一个规范的主要目的,是为了让不同的开发人员写的代码能保持一致性,方便别人看自己的代码.另外,对个人来说,也能起到让自己看着舒服的作用. 1. 基本 * 使用UTF-8 ...
- Android 权限查寻表
示例 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=" ...
- 手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
前几天朋友帮忙拿到一个ZXV10 H618B路由器,一看需要12V供电,还好以前留下一个12V输出的DC充电器,关键时刻用上了,先大概下载了此路由器的用户手册,发现原来是08年的产品,都5年了. 开始 ...
- Eclipse修改编码后乱码解决
Eclipse用了一段时间,都是用的gbk编码的,突然想要规范下,强迫症犯了,于是将在Window->Preference->Appearances->Workspace修改Text ...
- Hive QL 介绍
小结 本次课程学习了 Hive QL 基本语法和操作. 一.实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的 ...
- mvn命令
打包:mvn package 编译:mvn compile 编译测试程序:mvn test-compile 清空:mvn clean 运行测试:mvn test 生成站点目录: mvn site 生成 ...
- WindowsPhone8SDK重装后设计器加载异常的处理办法
Close all running instances of Visual Studio 2012 start cmd.exe (as admin/elevated) cd /d %windir%\i ...
- 陈正冲老师对于c语言野指针的解释
那到底什么是野指针呢?怎么去理解这个“野”呢?我们先看别的两个关于“野”的词: 野孩子:没人要,没人管的孩子:行为动作不守规矩,调皮捣蛋的孩子.野狗:没有主人的狗,没有链子锁着的狗,喜欢四处咬人. 对 ...
- Java [leetcode 27]Remove Element
题目描述: Given an array and a value, remove all instances of that value in place and return the new len ...