2016-05-29 5 views
0

SDN 3からSDN 4へ、Neo4j 2.3からNeo4j 3.0.1への移動中に、OEMとカスタムのCypherクエリの間に不一致が発生しました。OEMとカスタムCypherクエリのNeo4j SDNの不一致

私は、次のサイファーのクエリを持っている:

@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を削除する正しいコードDecisionCriterionUserノードに接続されCriterionGroupを - あなたが見ることができるように

enter image description here

これが私のデータのスキーマです。 、整合性を維持関係を削除するには、OGMを使用し

@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); 
} 
+0

OGMは、あなたが彼に言わないと、あなたがデータベースで行う変更を認識していません。また、sdn3は組み込みgdbの周りに構築され、sdn4はサーバーデータベースの周りに構築され、データマッピングの実際のコンセプトを持っています。 –

+0

これは私の質問です - OGMでこのノードを削除する正しい方法は何ですか?私は回避策を使用したくありません。 – brunoid

+1

criterionGroupと彼の関係をロードし、POJOのsession.save()との関係を削除します。 –

答えて

2

にも維持されている、あなたのオブジェクト参照を提供:示唆したように

は、私が

私の方法を更新しました更新しました。 CriterionGroupを削除する場合は、アプリケーションによってロードされる関連エンティティ(Decision、Criterion、User)に対して、関連付けられたCriterionGroupsをnullに設定して保存する必要があります。これらのどれもロードされていない場合(CriterionGroupを深度0にロードした場合に可能です)、リポジトリ/セッションを介してCriterionGroupを削除するだけで済みます。読み込みと深度の保存を混在させるときには注意してください。

OGMをバイパスしてカスタムのCypher delete文を使用する場合は、セッションをクリア(または新しいものを使用)し、エンティティを再ロードしてグラフと同期させて戻る必要があります。

関連する問題