0
我尝试审核Order
类,其中有List<OrderItem>
字段。 的Order
类看起来是这样的:Hibernate Envers:Audit @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区分)。
的问题是,我尝试创建Order
具有多个OrderItem
S,每个项目都是独一无二的,但冬眠抛出异常说:
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
,因为envers只能从@JoinColumn
看到order_id
并将其视为标识符。
我不知道如何告诉envers同时使用itemId
和order_id
作为修订版的标识符,或者我误解了这个问题。
请帮忙。
谢谢。
那么你的情况下的主键它是itemId和order_id的组合? –
从我给出的类定义来看,它并没有明确地将主键设置为itemId和order_id的组合,因为我在OrderItem定义中没有order_id,但是我可以在RDBMS中创建唯一的约束来确保这一点。 – Stackle
根据我的理解,我认为'@ ElementCollection'也不关心主键,它只是使用'@ JoinColumn'作为连接点从'@ CollectionTable'获取/连接项目。 – Stackle