2009-10-28 28 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