如何使用Hibernate在Oracle序列上实现持久计数器?

时间:2019-05-15 15:11:37

标签: java hibernate

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

我不想使用朴素的select mys-seq.nextval from dual(或org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer),因为我想使用序列缓存功能-我不想每次需要一个新数字时都访问数据库。

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

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

PS。我有Spring Boot应用程序。

1 个答案:

答案 0 :(得分:0)

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

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

最初,我以为我必须利用内部数据库级别的序列号缓存,但是使用普通的应用程序级别缓存可以达到相同的结果