SDN4不允许在同一个类上有多个一对一的关系

时间:2016-03-28 16:00:11

标签: java neo4j spring-data-neo4j-4 neo4j-ogm

我正在使用Spring Data Neo4j 4(SDN4),似乎当我尝试“修改”一对一关系属性时,SDN将以特定的操作方式将其“添加”到数据库中< / p>

代码(跳过封装)

@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] - &gt;(Bar1)和(Foo1) - [:BAR2] - &gt;(Bar2)

这是最重要的行动: 重新启动弹簧容器并运行此跟随测试(不要在同一时间运行它)

@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] - &gt;(Bar1)和(Foo1) - [:BAR1] - &gt;(Bar3) 和(Foo1) - [:BAR2] - &gt;(Bar2) 原始关系(Bar1)不会被删除。

一旦弹簧容器(或Neo4j会话)重新启动,一对一的关系就会完全出错。

当前的解决方法是将所有关系变为一对多的关系     @NoteEntity     公共课Foo {

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

还有其他方法可以解决吗?

0 个答案:

没有答案