0

我有一个父对象,其版本锁定策略定义如下:

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 查询确实将更改返回到子字段。

我认为级联版本锁定策略应该导致父级在其任何私有拥有的子对象被更新时更新(由它们的版本字段定义)。我错了,还是我的代码中的其他地方可能有问题?

4

2 回答 2

1

只需在父实体类上使用以下内容:

@OptimisticLocking(cascade = true)

并用@PrivateOwned 标记@OneToMany

这仅在您使用版本列时有效。请检查:

http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Extensions_for_Optimistic_Locking

于 2011-05-20T10:59:24.750 回答
0

我错了。eclipselink 代码中没有任何内容可以满足我的要求。

我想我会简单地向子对象添加一个触发器来更新父 cacheId。

于 2009-11-24T17:19:19.453 回答