java - 如何使用 Hibernate 对 Oracle 序列实现持久计数器?

标签 java hibernate

我想要一个持久的分布式计数器。我的想法是使用数据库序列。仅有顺序。我不想有一个表,因为我不会填充该表。我只需要一系列唯一的数字。

我不想使用天真的select mys-seq.nextval from Dual(或org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer),因为我会喜欢使用序列缓存能力 - 我不想每次需要新号码时都访问数据库。

我想我应该使用org.hibernate.id.enhanced.SequenceStyleGenerator,但我找不到任何如何在没有实体的情况下“独立”使用它的示例。

不幸的是,我发现的所有示例都描述了如何使用序列配置实体 ID 生成。

PS。我有 Spring Boot 应用程序。

最佳答案

我找到了解决问题的简单解决方案:我可以将数据库序列中的每个数字视为要使用的数字范围。例如,如果序列返回 5,则意味着我的计数器的保留范围是 5000 - 5999。

在该解决方案中,我将针对数千个数字访问数据库一次。

最初我认为我必须利用内部数据库级序列号缓存,但我可以通过简单的应用程序级缓存实现相同的结果

关于java - 如何使用 Hibernate 对 Oracle 序列实现持久计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152600/

相关文章:

java - 未知输入字节长度转换为 int

java - Java 中的类型映射

java - 如何从 spring application.yml 设置 "max_allowed_packet"属性

java - Hibernate插入SQL语句不起作用

java - 什么是 Java 中的线程泄漏和线程转储

Java:为数组赋值

Javafx在特定时间弹出提醒通知

java - 使用 SQLite 时,Hibernate 将 Calendar 存储为 int

java - 使用 Spring + hibernate + JPA 从表中选择特定列并将结果存储到非实体 POJO

java - 在 Hibernate 中获取 JDBC 结果集