javax.persistence.SequenceGenerator和分配大小

时间:2016-03-16 05:29:35

标签: java oracle hibernate jpa spring-data-jpa

我们都知道使用@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;

1 个答案:

答案 0 :(得分:0)

在@SequenceGenerator中添加allocationSize = 1:

@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;