OEM 和自定义 Cypher 查询之间的 Neo4j SDN 不一致
Neo4j SDN inconsistency between OEM and custom Cypher queries
在从 SDN 3
移动到 SDN 4
以及从 Neo4j 2.3
移动到 Neo4j 3.0.1
时,我 运行 遇到了 OEM 和自定义 Cypher 查询之间不一致的问题。
我有以下 Cypher 查询:
@Query("MATCH ()-[r]-(cg:CriterionGroup) WHERE id(cg) = {criterionGroupId} DELETE cg, r")
void deleteCriterionGroup(@Param("criterionGroupId") Long criterionGroupId);
现在,对于 SDN 4,如果在 deleteCriterionGroup
方法调用后没有以下解决方法,此查询将无法工作:
session.clear();
能否请您展示正确的代码如何在 SDN 4 中删除 CriterionGroup
now 以保持相关节点的引用一致。
这是我的数据架构:
如您所见 - CriterionGroup
连接到 Decision
、Criterion
和 User
节点。
已更新
按照提示,我更新了我的方法:
@Override
public void deleteCriterionGroup(Long criterionGroupId) {
CriterionGroup criterionGroup = criterionGroupRepository.findOne(criterionGroupId);
criterionGroup.setAuthor(null);
criterionGroup.setOwner(null);
criterionGroup.setCriteria(null);
criterionGroup = criterionGroupRepository.save(criterionGroup);
criterionGroupRepository.delete(criterionGroup);
}
使用 OGM 删除关系可以保持一致性,前提是您的对象引用也得到维护。
如果您要删除 CriterionGroup,那么对于您的应用程序加载的任何相关实体(决策、标准、用户),您需要将其关联的 CriterionGroups 设置为 null,然后保存。如果加载了其中 none 个(如果将 CriterionGroup 加载到深度 0 则可能),那么您只需通过 repository/session 删除 CriterionGroup。混合加载和保存深度时要小心。
如果您想绕过 OGM 并使用自定义 Cypher 删除语句,那么,您必须清除会话(或使用新会话)并重新加载实体以使它们恢复与图形同步。
在从 SDN 3
移动到 SDN 4
以及从 Neo4j 2.3
移动到 Neo4j 3.0.1
时,我 运行 遇到了 OEM 和自定义 Cypher 查询之间不一致的问题。
我有以下 Cypher 查询:
@Query("MATCH ()-[r]-(cg:CriterionGroup) WHERE id(cg) = {criterionGroupId} DELETE cg, r")
void deleteCriterionGroup(@Param("criterionGroupId") Long criterionGroupId);
现在,对于 SDN 4,如果在 deleteCriterionGroup
方法调用后没有以下解决方法,此查询将无法工作:
session.clear();
能否请您展示正确的代码如何在 SDN 4 中删除 CriterionGroup
now 以保持相关节点的引用一致。
这是我的数据架构:
如您所见 - CriterionGroup
连接到 Decision
、Criterion
和 User
节点。
已更新
按照提示,我更新了我的方法:
@Override
public void deleteCriterionGroup(Long criterionGroupId) {
CriterionGroup criterionGroup = criterionGroupRepository.findOne(criterionGroupId);
criterionGroup.setAuthor(null);
criterionGroup.setOwner(null);
criterionGroup.setCriteria(null);
criterionGroup = criterionGroupRepository.save(criterionGroup);
criterionGroupRepository.delete(criterionGroup);
}
使用 OGM 删除关系可以保持一致性,前提是您的对象引用也得到维护。 如果您要删除 CriterionGroup,那么对于您的应用程序加载的任何相关实体(决策、标准、用户),您需要将其关联的 CriterionGroups 设置为 null,然后保存。如果加载了其中 none 个(如果将 CriterionGroup 加载到深度 0 则可能),那么您只需通过 repository/session 删除 CriterionGroup。混合加载和保存深度时要小心。
如果您想绕过 OGM 并使用自定义 Cypher 删除语句,那么,您必须清除会话(或使用新会话)并重新加载实体以使它们恢复与图形同步。