List<OrderItem>
필드를 가진 Order
클래스를 감사하려고합니다. Order
클래스는 다음과 같습니다최대 절전 모드 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
들이 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를 합성합니까? –
내가 준 클래스 정의에서 itemId와 order_id의 합성이되도록 명시 적으로 기본 키를 설정하지는 않습니다. 왜냐하면'OrderItem' 정의 내에 order_id가 없기 때문에 RDBMS에 고유 한 제약 조건을 만들 수 있습니다. – Stackle
제 생각에'@ ElementCollection'도 기본 키를 신경 쓰지 않는다고 생각합니다. @ JoinColumn을 조인 포인트로 사용하여'@ CollectionTable'의 항목을 가져 오거나 조인하면됩니다. – Stackle