List<OrderItem>
フィールドを持つOrder
クラスを監査しようとしています。 Order
クラスは次のようになります。Hibernate Envers:@CollectionTableフィールドの監査
class Order {
@Audited
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "order_order_item", joinColumns = @JoinColumn(name = "order_id"))
List<OrderItem> items;
}
そしてOrderItem
のクラスは次のようになります。
class OrderItem {
private Integer quantity;
private Long itemId;
}
各注文する必要がありますが、独特のOrderItemを(のitemIdにより区別)が含まれています。問題は、私は複数のOrderItem
Sを有しているOrder
を作成しようということである
、各アイテムはユニークですが、スロー例外を休止言った:
A different object with the same identifier value was already associated with the session : [order_order_item_AUD#{SETORDINAL=1, REV=DefaultRevisionEntity(id = 16, revisionDate = Oct 9, 2016 1:38:12 PM), Order_id=57, REVTYPE=ADD}]; nested exception is javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [order_order_item_AUD#{SETORDINAL=1, REV=DefaultRevisionEntity(id = 16, revisionDate = Oct 9, 2016 1:38:12 PM), Order_id=57, REVTYPE=ADD}]
私はその問題はおそらくenversが異なるため、同じ識別子を使用してということだと思いますOrderItem
は、order_id
を@JoinColumn
からのみ参照し、それを識別子として扱うためです。
エンバーに改訂の識別子としてitemId
とorder_id
の両方を使用するように指示する方法がわかりません。あるいは、私はこの誤解を誤解するかもしれません。
助けてください。
ありがとうございます。
あなたのケースではプライマリキーはitemIdとorder_idの複合ですか? –
私が与えたクラス定義から、 'OrderItem'定義内にorder_idがないので、itemIdとorder_idの複合であるように主キーが明示的に設定されていませんが、RDBMSで一意の制約を作成することがあります。 – Stackle
私は「@ ElementCollection」も主キーを気にしないと思うので、@ JoinColumnをジョインポイントとして使用して '@ CollectionTable'から項目をフェッチ/ジョインするだけです。 – Stackle