代码之家  ›  专栏  ›  技术社区  ›  ILMTitan

具有级联VersionLockingPolicy的父对象不拾取对私有子对象的数据库更改

  •  0
  • ILMTitan  · 技术社区  · 15 年前

    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);
    

    当我在子对象上更改字段并直接在数据库上更新子缓存ID时,eclipselink查询不会获取更改。然后,当我更新父对象的cacheId时,eclipselink查询会将更改返回到子字段。

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Ecmel Ercan    14 年前
        2
  •  0
  •   ILMTitan    15 年前

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

    我想我只需要向子对象添加一个触发器来更新父cacheId。