我们都知道使用@SequenceGenerator时Hibernate的默认行为 - 它将实际数据库序列增加1,将此值乘以50(默认分配大小值) - 然后将此值用作实体ID。所以第一个问题是为什么hibernate将从数据库中获取的序列号乘以分配大小?????
二,如果Spring / Hibernate应用程序和ETL作业同时在同一个表中插入数据,如何摆脱约束违例异常?
同样可以看到表中序列值的巨大差距,这也是解决方案的原因。
仅供参考,我们在应用程序中使用以下注释,以使用Oracle数据库中定义的序列生成主键列的值:
@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;
答案 0 :(得分:0)
在@SequenceGenerator中添加allocationSize = 1:
@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;