我有一个父对象,其版本锁定策略定义如下:
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 查询确实将更改返回到子字段。
我认为级联版本锁定策略应该导致父级在其任何私有拥有的子对象被更新时更新(由它们的版本字段定义)。我错了,还是我的代码中的其他地方可能有问题?