2009-11-19 17 views
0

我有一個父對象定義爲一個版本鎖定策略如下:家長與級聯VersionLockingPolicy不拾取數據庫更改民營子對象

VersionLockingPolicy lockingPolicy = new VersionLockingPolicy(); 
lockingPolicy.setIsCascaded(true); 
lockingPolicy.setWriteLockFieldName("CacheId"); 
descriptor.setOptimisticLockingPolicy(lockingPolicy); 

,並映射爲一個孩子如下:

OneToManyMapping childMapping = new OneToManyMapping(); 
childMapping.setAttributeName("children"); 
childMapping.setReferenceClass(Child.class); 
childMapping.dontUseIndirection(); 
childMapping.privateOwnedRelationship(); 
childMapping.useBatchReading(); 
childMapping.useCollectionClass(ArrayList.class); 
childMapping.addTargetForeignKeyFieldName("Child.ParentId", "Parent.Id"); 
descriptor.addMapping(childMapping); 

當我更改子級上的字段並直接在數據庫上更新子級cacheId時,eclipselink查詢不會接受更改。當我然後更新父對象的cacheId時,eclipselink查詢確實將更改返回到子字段。

我認爲級聯的版本鎖定策略應該會導致父級更新其私有子對象的任何更新(如其版本字段所定義的)。是我錯了嗎,或者在我的代碼中可能有其他地方出現錯誤?

回答

0

我錯了。 eclipselink代碼中沒有任何東西會做我想要的。

我想我會簡單地向子對象添加一個觸發器來更新父cacheId。