Spring 3 + Hibernate アプリケーションを 2 つの負荷分散サーバーにデプロイしました。
データベースに 50 回挿入した後、hibernate は DB シーケンス 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;
}
前もって感謝します。