【发布时间】:2013-12-30 18:59:16
【问题描述】:
我从标题中知道,这听起来像是 this question 的复制品,但我向你保证不是。事实上,@Indexed(unique=true) 工作正常,因为它的重复项被捕获了!但是,在创建第一个节点时,Spring 实际上以某种方式创建了两个节点。这是我正在做的事情:
@Autowired
private MyEntityRepository repo;
public void testCreate(){
MyEntity me = new MyEntity();
me.setName("somename");
me.setDescription("blah blah");
repo.save(me);
}
@NodeEntity
public class MyEntity{
@GraphId
private Long id;
@Indexed(unique=true)
private String name;
private String description;
}
在空数据库上运行后,将抛出 DataIntegrityViolationException 并创建两个节点。具有最低 ID 的节点将具有名称和描述字段,但另一个节点将只有名称字段。奇怪的是,两个节点中的名称字段具有相同的值,因此即使抛出异常,它仍然试图创建节点。如果我去掉@Indexed 注释,一切正常,只创建一个节点(但显然没有重复预防)。
我使用的是独立的 Neo4j 服务器,因为该应用程序的其他几个部分需要能够访问它。但是,我注意到嵌入式 Neo4j 服务器不会发生这种行为。我真的希望 Spring over HTTP 支持这样一个有用的特性,但如果不支持,我也不会感到惊讶。有没有办法让这个工作?
【问题讨论】:
标签: java spring neo4j spring-data-neo4j