我正在使用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;
}
还有其他方法可以解决吗?