我有一个父对象,其版本锁定策略定义如下:
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 :(得分:1)
在父实体类上使用以下内容:
@OptimisticLocking(cascade = true)
并使用@PrivateOwned标记@OneToMany
仅当您使用版本列时才有效。请检查:
答案 1 :(得分:0)
我错了。 eclipselink代码中没有任何内容可以执行我想要的操作。
我想我会简单地在子对象上添加一个触发器来更新父cacheId。