0

Hibernate を使用して、エンティティ Payment と Refund の間に多対多の関係があり、楽観的ロックを使用する@Version

@Entity
class Payment {
    @Id
    @GeneratedValue
    public Long paymentId;
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Refund> refunds = new ArrayList<Refund>();

    @Version
    private long version;
}

@Entity
public class DRefund {
    @Id
    @GeneratedValue
    private Long refundId;

    @ManyToMany(mappedBy = "refunds")
    private List<Payment> payments = new ArrayList<Payment>();

    @Version
    private long version;
}

PaymentHibernate セッションを使用してデータベースからをロードし、それに を追加してから Hibernate セッションを使用Refundして保存すると、dbRefundPayment行も更新されます。

insert into Refund (version, refundId) values (?, ?, ?)
update Payment set version=? where paymentId=? and version=?
insert into Payment_Refund (payments_paymentId, refunds_refundId) values (?, ?)

Paymentまったく変更されていません。これは必要ですか、またはこの動作を回避するために休止状態のマッピングを調整できますか? を削除する@Versionと、Paymentは更新されません。

助けてくれてありがとう!

4

1 に答える 1

2

@OptimisticLockこの動作は、注釈を使用して構成できます。

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OptimisticLock(excluded = true)
private List<Refund> refunds = new ArrayList<Refund>();
于 2013-04-12T14:27:11.040 に答える