在微服务中将allocationSize设置为50时,为什么会获得唯一约束冲突异常

时间:2018-09-20 10:42:44

标签: java oracle hibernate sequence

环境:

  

Hibernate5.1,JPA1.8,Oracle12,Spring 4.3.9

序列:

CREATE SEQUENCE "SEQ_PROBLEM" MINVALUE 0 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 100 NOORDER NOCYCLE;

实体配置:

@Id
@SequenceGenerator(name = "PROBLEM_ID_GENERATOR", sequenceName = "SEQ_PROBLEM", allocationSize = 50)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PROBLEM_ID_GENERATOR")
private long id;

测试步骤:

  1. 启动一台服务器,然后保存实体,成功。
  2. 启动其他服务器,并保存实体,我收到“违反唯一约束”错误。
  

java.sql.SQLIntegrityConstraintViolationException:ORA-00001:违反了唯一约束(******。PK_PROBLEM)

我检查了代码,并且PooledOptimizer类未应用来自oracle的50个序列,因此我猜第二台服务器无法获取正确的序列号。由于性能原因,我不想将allocationSize设置为1。这种情况有什么想法?谢谢。

0 个答案:

没有答案