gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:31:50 27 4
gpt4 key购买 nike

我们在 2 台负载均衡服务器上部署了 Spring 3 + Hibernate 应用程序。

在数据库中插入 50 次后,hibernate 不会调用数据库序列 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;
}

提前致谢。

最佳答案

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

每次插入数据库时​​,都必须询问下一个序列值。每个插入都必须在事务内。Hibernate(默认情况下)的allocationSize = 50,因此要解决您的问题,您必须将其显式设置为1。

 @SequenceGenerator(allocationSize=1 ...)

关于java - Spring 3 应用程序中 Hibernate @SequenceGenerator 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com