作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试审核Order
类有 List<OrderItem>
field 。Order
类看起来像这样:
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,每一项都是唯一的,但是hibernate抛出异常说:
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
并将其视为标识符。
我不知道如何告诉 envers 同时使用 itemId
和order_id
作为修订的标识符,或者我可能误解了问题。
请帮忙。
谢谢。
最佳答案
相反,您可能需要考虑按如下方式映射:
@Embeddable
public class OrderItemId implements Serializable {
private Long orderId;
private Long itemId;
}
@Entity
public class OrderItem {
@EmbeddedId
private OrderItemId id;
@ManyToOne
@MapsId("orderId")
@JoinColumn(name = "order_id")
private Order order;
@ManyToOne
@MapsId("itemId")
@JoinColumn(name = "item_id")
private Item item;
}
如果您想保留 @ElementCollection
映射,您可能需要包含 @OrderColumn
注释,并确保您实现使用 item_id 的正确 hashCode/equals 方法仅限 order_id 值。
关于java - hibernate 恩弗斯 : Audit @CollectionTable field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941603/
我是一名优秀的程序员,十分优秀!