即使这个问题非常古老,我还是因为JPA 2.0和Oracle序列问题而偶然发现。

想要分享我对某些事情的研究-

数据库序列定义中GenerationType.SEQUENCE的@SequenceGenerator(allocationSize)与INCREMENT BY之间的关系

确保将@SequenceGenerator(allocationSize)设置为与数据库序列定义中的INCREMENT BY相同的值,以避免出现问题(初始值也是如此)。

例如,如果我们在数据库中用INCREMENT BY值定义20的序列,则将SequenceGenerator中的分配大小也设置为20。在这种情况下,JPA直到到达下一个20标记时才对数据库进行调用,同时每次递增 内部值为1。 这样可以保存数据库调用,以便每次获取下一个序列号。这样做的副作用是-每当重新部署应用程序或在两者之间重新启动服务器时,它将调用数据库以获取下一批,并且您会看到序列值中的跳转。 另外,我们还需要确保数据库定义和应用程序设置保持同步,因为这两者都是由不同的组管理的,因此您可能无法始终保持同步,并且您可能会很快失去对它们的控制。 如果数据库值小于分配大小,则将看到由于Id值重复而导致的PrimaryKey约束错误。 如果数据库值大于分配大小,您将看到Id值的跳跃。

如果数据库序列INCREMENT BY设置为1(这通常是DBA所做的),则将分配大小也设置为1,以便它们是同步的,但是JPA每次都调用数据库来获取下一个序列号。

如果您不想每次都调用数据库,请使用GenerationType.IDENTITY策略,并由数据库触发器设置@Id值。 使用GenerationType.IDENTITY时,只要调用em.persist,该对象就会保存到DB,并且将id的值分配给返回的对象,因此我们不必执行em.merge或em.flush。 (这可能是JPA提供程序特定的。。不确定)

另一件事-

JPA 2.0自动运行ALTER SEQUENCE命令以同步数据库序列中的dispatchSize和INCREMENT BY。 由于大多数情况下,我们使用不同的模式名称(应用程序用户名),而不是存在序列的实际模式,并且应用程序用户名将没有ALTER SEQUENCE特权,因此您可能会在日志中看到以下警告-

000004c1运行时W CWWJP9991W:openjpa运行时:警告:无法 缓存序列“ RECORD_ID_SEQ”的序列值。 你的 应用程序无权运行ALTER SEQUENCE命令。 确保它具有运行ALTER SEQUENCE的适当权限 命令。

由于JPA无法更改序列,因此JPA每次都会调用数据库以获取下一个序列号,而不管@ SequenceGenerator.allocationSize的值如何。 这可能是不想要的结果,我们需要意识到。

要使JPA不运行此命令,请在persistence.xml中设置此值。 这样可以确保JPA不会尝试运行ALTER SEQUENCE命令。 虽然它写了一个不同的警告-

00000094运行时W CWWJP9991W:openjpa运行时:警告: 属性“ openjpa.jdbc.DBDictionary = disableAlterSeqenceIncrementBy”是 设置为true。 这意味着“ ALTER SEQUENCE ... INCREMENT BY” SQL 不会对序列“ RECORD_ID_SEQ”执行该语句。 OpenJPA 执行此命令以确保序列的INCREMENT BY值 在数据库中定义的匹配于在 实体的顺序。 禁用此SQL语句后, 用户的责任,以确保实体的顺序 定义与数据库中定义的序列匹配。

如警告中所述,重要的是我们需要确保数据库序列定义中的@ SequenceGenerator.allocationSize和INCREMENT BY是同步的,包括@SequenceGenerator(allocationSize)的默认值50。否则会导致错误。

sequence mysql jpa_Java-JPA-生成器-@SequenceGen相关推荐

  1. 基于javaweb+mysql的+JPA图书馆座位占座预约管理系统(管理员、老师、

    基于javaweb+mysql的+JPA图书馆座位占座预约管理系统(管理员.老师.学生) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均 ...

  2. 如何使用MySQL和JPA使用Spring Boot构建Rest API

    Hi Everyone! For the past year, I have been learning JavaScript for full-stack web development. For ...

  3. springboot+jpa+mysql Springboot+jpa+jdbc+sqlserver 使用时遇到的一系列的问题

    更改背景 正在做一个微信小程序的前后端项目,一开始使用的是springboot+jpa+mysql,但负责接受数据存入数据库的负责人执意要用sqlserver.本来微信小程序前端,以及spring b ...

  4. 基于javaweb+mysql的+JPA旅行网站旅游管理系统(前台、后台)

    基于javaweb+mysql的+JPA旅行网站旅游管理系统(前台.后台) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适 ...

  5. docker oracle navicat_拥抱开源从零开始 Docker、Mysql amp; JPA

    MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) ...

  6. jpa oracle mysql,oracle+jpa和mysql+mybatis的混合多数据源配置例子

    最近在学习的时候看到了多数据源这一章,回想以前做的所有项目用到了MySQL,Oracle,Mybatis,SpringJpa等等. 这里不评论各自的优缺点,也不推荐该使用哪一种.大部分的文章都是单一技 ...

  7. jpa mysql timestamp_Java JPA设置默认值、Timestamp设置、自动获取时间

    设置默认值 @Column(name="state",columnDefinition="tinyint default 0") private Integer ...

  8. mysql使用jpa仓储查询报错_Jpa自动查询报错

    我解决了这个问题. 后来我发现报错信息中还有一行,不管我怎么尝试,都是会提示某一个变量有问题,我做了一下修改,解决了. 我下面详细写一下这个问题. 其实web开发我不熟悉,我之前不是做这个是,所以我下 ...

  9. java jpa_Java JPA 语法知识

    前提操作 创建一个可持久化的实体类 dao层继承JpaRepository T:实体类 ID:实体类的主键类型 例:public interface SysUserRespository extend ...

最新文章

  1. WPF解析TTF 字体
  2. 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。...
  3. 计算机程序设计员_第二届北京大工匠计算机程序设计员、网络与信息安全管理员挑战赛:一场互联网“战场”的巅峰对决...
  4. oracle 查询关键字,Oracle 中的SELECT 关键字(查询、检索)
  5. 基于ARM的linux嵌入式操作系统
  6. Electron开发入门
  7. c语言中判断一个字符串是否包含另一个字符串
  8. 快速判断二叉树先序遍历 后序遍历
  9. C++ Qt学习笔记(3)QT中的文本处理
  10. 信用卡-可恶的招商银行,可恶的循环利息
  11. javaeye怎么打不开了?当前!2010,10,24,23:08
  12. 正则表达式那些事儿(一)
  13. 大数据下的用户画像标签去重
  14. 一组Android机器人素材图片
  15. HIVE-启动服务-启动DG连接-迁移数据LINUX-HDFS-HIVE
  16. BI报表分析控件Wyn,助力数据可视化
  17. AI公司进入倒闭潮,5种公司最易“被倒闭”?(下)
  18. java实现钢琴颜色改变_Android 拨号盘按键音修改为钢琴音效果实现
  19. JS对HTML代码的转义(转码)和反转义(解码)
  20. Origin2021PRO下载

热门文章

  1. stm32 str转hex_【SW4STM32生成 hex文件的设置方法】
  2. 一些恶意软件的分析收集整理
  3. 由巨型计算机到微型计算机,微机原理第一章节:基础知识.ppt
  4. java开源游戏下载安装_开源java扫雷游戏,Swing版。
  5. html元素一行显示不完收缩_这些常用的HTML标签,你还不知道吗?
  6. n9009 Android5.0内核,三星N9009(Galaxy Note 3 电信版 Android 5.0)刷Recovery教程
  7. php ssh2函数,SSH2 函数 - PHP 7 中文文档
  8. 基于区域生长算法的图像分割python_图像分割中区域生长算法的程序设计与实现...
  9. vim关闭所有折叠命令
  10. 计算机强化课程计算机网络,大学计算机网络技术课程教学改革