我们都知道使用@SequenceGenerator时Hibernate的默认行为-它使实际数据库序列增加一,将此值乘以50(默认分配大小值)-然后将该值用作实体ID。因此,第一个问题是为什么休眠模式将从数据库中获取的序列号与分配大小相乘?
第二,在Spring / Hibernate应用程序和ETL作业同时将数据插入同一表的情况下,如何摆脱约束冲突异常?
还可以看到表中序列值的巨大差距,对此也有什么解决方案。
仅供参考,我们在应用程序中使用以下注释使用Oracle数据库中定义的序列生成主键列的值:
@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;
最佳答案
您在@SequenceGenerator中添加allocationSize = 1:
@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;
关于java - javax.persistence.SequenceGenerator和分配大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36027451/