0

entry_id_seq我们有一个存储过程,它为条目 id ( )生成数字。通过以下设置,代码生成的数字比直接用 SQL 调用的数字要大。

例如,以下代码为 id 生成一个数字“11195215652”。但是如果我运行select entry_id_seq.NEXTVAL nv from dual,它会返回小得多的“32350910”。

@javax.persistence.SequenceGenerator(name = "seq",
sequenceName = "entry_id_seq")
public class SomeClassimplements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq")
    @Column(name = "ID")
    private Long id;

我尝试了下面的建议

@javax.persistence.SequenceGenerator(name = "seq",
sequenceName = "entry_id_seq", allocationSize = 1, initialValue= 1)

但它给了我以下错误:

Caused by: org.hibernate.HibernateException: increment size cannot be less than 1
    at org.hibernate.id.enhanced.OptimizerFactory$LegacyHiLoAlgorithmOptimizer.<init>(OptimizerFactory.java:336)
    at org.hibernate.id.SequenceHiLoGenerator.configure(SequenceHiLoGenerator.java:64)
    at org.hibernate.id.factory.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:110)
4

2 回答 2

2

你用的是什么版本的休眠?如果 < 3.5.3 然后检查这个https://hibernate.onjira.com/browse/HHH-5230

似乎它会影响配置有注释的 allocationSize = 1 的遗留生成器。

解决方案:1.配置使用新生成器,2.升级,3.手动修补您的版本。

于 2011-07-20T20:35:40.040 回答
0

每个讨论: https ://forum.hibernate.org/viewtopic.php?t=973682

解决方案是:在 SequenceGenerator 注释中,添加allocationSize = 1, initialValue= 1

于 2011-06-14T20:30:08.147 回答