Oracle hibernate序列生成器问题

2024-02-29

我正在使用 oracle 11g、Java(struts2) 和 Hibernate 开发一个应用程序。

我有名为 mytemp 的表,其列 mytemp_id 的类型为 NUMBER(22,0)。

在我的 mytemp.hbm.xml 文件中,ID 如下所示

<id name="mytempId" type="big_decimal">
        <column name="MYTEMP_ID" precision="22" scale="0" />
        <generator class="sequence">
            <param name="sequence">MYTEMP_TEMP_ID_SEQ</param>
        </generator>
    </id>

在我的 Oracle 数据库中,创建了名为“MYTEMP_TEMP_ID_SEQ”的序列,并且在 Oracle 中工作正常。

现在,当我尝试使用休眠插入记录时,它给出以下错误

org.hibernate.id.IdentifierGenerationException:此 id 生成器生成长整型、短整型或字符串

似乎当我的序列返回 Number 时,hibernate 将其视为 BigDecimal,而 hibernate 序列生成器类仅考虑长、整数、短和字符串的值。

Hibernate 不应该有 BigDecimal 的问题。但我认为他们还没有为序列生成器实现 BigDecimal

任何人都可以帮我解决这个问题吗?

Thanks.


老实说,我无法想象为什么你会坚持将 ID 设置为 BigDecimal 而不是 long。最大长值是9,223,372,036,854,775,807尽管不可否认,它大约是最大 NUMBER(22) 值的千分之一,但实际上应该是足够了。如果你要生成一个million身份标识每一秒,你必须这样做30万年为了耗尽你的序列。

也就是说,为了将标识符生成为 BigDecimal,您需要编写自己的生成器。您可以通过扩展 Hibernate 的内置 SequenceGenerator 并覆盖其来做到这一点generate()方法。而不是打电话给IdentifierGeneratorFactory.get()它仅支持 long/int/short/String,您可以从结果集中以 BigDecimal 形式获取序列值。

然后您将需要声明你的生成器 http://docs.jboss.org/hibernate/stable/core/reference/en/html/mapping.html#mapping-declaration-id通过指定其完整的类名:

<generator class="com.mypackage.BigDecimalGenerator">
  <param name="sequence">MYTEMP_TEMP_ID_SEQ</param>
</generator>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle hibernate序列生成器问题 的相关文章

随机推荐

  • 用于确保 shell 脚本在任何给定时间仅运行一个实例的 Shell 片段 [重复]

    这个问题在这里已经有答案了 可能的重复 确保一次只运行一个 shell 脚本实例的快速而肮脏的方法 https stackoverflow com questions 185451 quick and dirty way to ensure
  • 每秒写入文件数

    我想将访问率较高的网站的访问记录下来并存档 每秒可以对日志文件执行多少写入 如果您无法使用 Analytics 为什么不使用网络服务器现有的日志系统呢 如果您使用的是真正的网络服务器 那么它几乎肯定是一种已经针对最大吞吐量进行了优化的日志记
  • CollisionBitMask 如何工作? Swift/SpriteKit

    据我所知 物理体的默认设置是当它们相互碰撞时会相互弹开 直到您将它们的碰撞位掩码设置为相同的数字 然而 由于我相信碰撞位掩码 我在完成看起来应该非常简单的事情时遇到了一个巨大的问题 let RedBallCategory UInt32 0x
  • 订阅主题的 Angular HTTP 调用关闭主题

    我有两个可以获取给定对象的服务 用于获取完整列表的初始 HTTP 调用 以及用于实时更新新元素的 Websocket 通知 我想将这两个调用连接到同一个可观察对象 以便显示页面不了解后端 有这样的电话 private getInitialD
  • UIWebView:禁用富文本编辑器的复制/剪切选项

    我有一个带有 contentEditable div 的 UIWebView 来实现某种富文本编辑器 一旦用户选择任何文本片段 我需要修剪 UIMenuController 中出现在 Web 视图中的复制和剪切选项 网络上似乎有很多解决方案
  • hive 0.14 更新和删除查询配置错误

    在阿帕奇中hive 0 14我们可以通过支持更新和删除查询ACID配置 hive configuration hive support concurrency true hive enforce bucketing true hive ex
  • 在Qt中获取本地IP地址

    有没有跨平台的方法来获取本地IP地址 即看起来像192 168 1 49 使用Qt的计算机 我想为 Symbian 手机创建一个 FTP 服务器 并且想显示 FTP 客户端应连接的 IP 地址 Use QNetworkInterface a
  • 如何追加多个文本文件并将每个文件名放入 pandas 的新列中?

    我有很多 txt文件夹中的文件 每个文件具有相同的结构 每个文件中的四列相同 但行数不同 1 txt 0 00781238 0 00082577 0 00781238 0 03314453 0 01562476 0 00064219 0 0
  • opencv - 使用特征检测进行对象跟踪

    我想跟踪视频中的一个对象 例如 移动的球 参考opencv教程 Features2D Homography来查找已知对象 我已经能够通过提供参考图像来跟踪静态图像中的对象 我计划使用参考图像从输入视频的第一帧中检测移动物体 对于下一帧 在前
  • SQL 约束检查值是否不存在于另一个表中

    在我的 PostgreSQL 中9 4数据库 我有一个表fields有一个柱子name具有独特的价值观 我正在创建一个新表fields new具有类似的结构 这里不重要 和一个列name以及 我需要一种方法来约束name要插入的值field
  • 如何打开 SwiftUI 应用程序并使用 Siri Intent Extension 中的 NSUseractivity 执行功能?

    我的问题 我的应用程序有自己的使用意图扩展创建的快捷方式操作 他们完美地执行后台操作 对于某些操作 我试图使意图扩展在快捷方式中运行时打开主 容器 应用程序并执行功能 我在使用 NSUserActivity 时遇到了麻烦 我不确定它是一个
  • 用Java编写多线程映射迭代器

    我有一个通用映射迭代器 如下所示 class Mapper
  • 为什么 sys.getrefcount() 返回 2?

    据我了解 sys getrefcount 返回对象的引用数量 在以下情况下 应该 为 1 import sys numpy a numpy array 1 2 3 4 print sys getrefcount a 然而 结果却是2 所以
  • 下载 iOS 时流式传输视频

    我使用的是 iOS 7 我有一个 mp4 视频需要在我的应用程序中下载 该视频很大 约 1 GB 这就是它不包含在应用程序中的原因 我希望用户能够在开始下载后立即开始观看视频 我还希望视频能够缓存在 iOS 设备上 这样用户以后就不需要再次
  • 如何将日志记录添加到带有时间戳的文件到 Raspberry Pi 的 Python TCP 服务器

    我的项目有点陷入困境 我迫切需要帮助 我需要一个简单的 TCP 服务器 python 代码 它具有日志记录和时间戳等功能 我可以将其用于我的 Raspberry Pi 这是我的最后一年项目 我看过一些例子 但由于我在编写自己的脚本 代码方面
  • 如何卸载 awslogs-agent-setup.py?

    仅使用后sudo python awslogs agent setup py region us east 1在我的 Amazon Linux AMI 上 我从 AWS 文档中发现了以下警告 请勿使用 RPM 安装更新 CloudWatch
  • 如何在 Android 8/9 上为 OkHttp 3.12.x 启用 TLSv1.3?

    我在 Android 9 Pixel 2 设备 上使用 OkHttp 3 12 2 并尝试连接到使用 OpenSSL 1 1 1 运行的 nginx 1 14 0 nginx 支持 TLSv1 3 我使用 Ubuntu 18 04 上的 F
  • 为什么C++中没有像Delphi中那样的“初始化”关键字?

    在切换到 C 之前 我们发现initializationDelphi 中的语言元素非常有用 它允许您在每个单元中拥有在程序启动时调用的代码 因此您可以初始化该单元的各个元素 我们认为这确实使事情变得更容易并有助于保持代码整洁 那么为什么没有
  • 如何修复重叠的注释/文本

    我试图阻止注释文本在我的图表中重叠 已接受的答案中建议的方法Matplotlib 重叠注释 https stackoverflow com questions 8850142 matplotlib overlapping annotatio
  • Oracle hibernate序列生成器问题

    我正在使用 oracle 11g Java struts2 和 Hibernate 开发一个应用程序 我有名为 mytemp 的表 其列 mytemp id 的类型为 NUMBER 22 0 在我的 mytemp hbm xml 文件中 I