繁体   English   中英

Spring 3应用程序中的Hibernate @SequenceGenerator问题

[英]Issue with Hibernate @SequenceGenerator in Spring 3 application

我们已经在2个负载平衡服务器上部署了Spring 3 + Hibernate应用程序。

在数据库中插入50次后,休眠状态不会调用nextval数据库序列,它会不断增加计数。 由于这个原因,两个服务器的序列值重叠,并且出现“唯一约束违规”异常。

例如,第一次,两个服务器的序列值分别为100和150。 当第一个实例的序列达到149时,应该调用seq.nextVal。 但是由于它没有这样做,所以将seq值连续增加到150,这被其他实例使用,并且失败了。 默认分配大小:50

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CUSTOMER_ID_SEQ")
@SequenceGenerator(name = "CUSTOMER_ID_SEQ", sequenceName = "CUSTOMER_SEQ")
@Column(name = "CUST_ID", unique = true, nullable = false)
public long getCustId() {
return custId;
}

提前致谢。

如果使用负载均衡器,但实例之间共享数据库,则无法缓存序列的值。

每次插入DB时,都需要询问下一个序列值。 并且每个插入都必须在事务内。 Hibernate(默认情况下)的分配大小= 50,因此要解决您的问题,必须将其显式设置为1。

 @SequenceGenerator(allocationSize=1 ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM