0

Spring Data Neo4j 4 (SDN4) を使用しています。1 対 1 の関係属性を「変更」しようとすると、SDN が特定の操作方法でデータベースにそれを「追加」するようです。

コード (カプセル化をスキップ)

@NoteEntity
public class Bar{

   String name;
}


@NoteEntity
public class Foo {

     String name;
     @Relationship(type="BAR1", direction=Relationship.INCOMING)   
     Bar b1;
     @Relationship(type="BAR2", direction=Relationship.OUTGOING) 
     Bar b2;
}

そして、それをテストします

@Test
public void test_add(){
     Foo foo1 = new Foo("Foo1");
     Bar bar1 = new Bar("Bar1");
     Bar bar2 = new Bar("Bar2");
     foo.b1 = bar1;
     foo.b2 = bar2;

     fooRepository.save(foo);
}

Neo4j クエリ ブラウザに移動すると、(Foo1)-[:BAR1]->(Bar1) と (Foo1)-[:BAR2]->(Bar2) が表示されます。

そして、これが最も重要なアクションです。Spring コンテナーを再起動し、このフォロー テストを実行します (同時に実行しないでください)。

@Test
public void test_update(){
     Foo foo1 = fooRepository.findAll().iterator().next();
     Bar bar3 = new Bar("Bar3");

     foo.b1 = bar3;
     fooRepository.save(foo);
}    

Neo4j クエリ ブラウザに移動すると、3 つの関係 (Foo1)-[:BAR1]->(Bar1) および (Foo1)-[:BAR1]->(Bar3) および (Foo1)-[:BAR2] が表示されます。 →(Bar2) 元の関係(Bar1)は削除されません。

スプリング コンテナ (または Neo4j セッション) が再起動されると、1 対 1 の関係が完全に崩れてしまうようです。

現在の回避策は、すべての関係を @NoteEntity public class Foo {

     String name;
     @Relationship(type="BAR1", direction=Relationship.INCOMING)   
     List<Bar> b1;
     @Relationship(type="BAR2", direction=Relationship.OUTGOING) 
     List<Bar> b2;
}

それを修正する他の方法はありますか?

4

0 に答える 0