2009-10-28 49 views
3

我有一个AbstractEntity类作为超我所有entites的定义是这样的乐观锁定列:OptimisticLocking和@OneToMany(mappedBy = ...)处理?

@Version 
private long lockVersion; 

现在,我经常得到实体OptimisticLockingExceptions,那些只在一个变化类似于下面的的mappedBy关系:

@OneToMany(mappedBy = Property.PROPERTY_DESCRIPTOR, cascade = { CascadeType.REMOVE }) 
private Set<Property> properties = new HashSet<Property>(); 

是否有可能从Hibernate乐观锁定中排除这些集合?实体在数据库中根本没有变化......只有其他人引用它。

回答

2

您可以通过通过@OptimisticLock注释明确排除它增加了版本号,如果它的肮脏排除特定的属性(和/或集合):

@OptimisticLock(excluded=true) 
@OneToMany(mappedBy = Property.PROPERTY_DESCRIPTOR, cascade = { CascadeType.REMOVE }) 
private Set<Property> properties = new HashSet<Property>(); 

要知道,这是一个Hibernate扩展JPA标准。

+0

这看起来很有前途......我会检查它是否能解决我的问题。 – 2009-10-28 22:24:38

+0

我已将此注释添加到所有不会级联合并或保持的mappedBy集合。 另一种解决方案是区分非托管实体的entity.getCollection()。add(...)和托管实体的em.refresh(实体)。这也避免了锁定问题。 – 2009-10-29 09:13:25

0

我认为在这个问题上接受的答案应该可以帮助您:link

我没有带,虽然没有尝试过自己,但它可能是可以检测的改变不需要版本更新,而不是增加版本。

+0

嗯可能......但我希望有某种注解或休眠功能来解决这个问题......我们将会看到。 – 2009-10-28 15:27:17

+0

一致认为,这有点冒险... – Tomas 2009-10-28 15:52:53