Spring Neo4j的独特索引不起作用

时间:2013-12-30 18:59:17

标签: java spring neo4j spring-data-neo4j

我知道从标题来看,这听起来像是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上支持这样一个有用的功能,但如果它没有,我不会感到惊讶。有没有办法使这项工作?

1 个答案:

答案 0 :(得分:1)

Spring Data Neo4j over HTTP并不真正使用事务。您使用什么SDN版本?

我尝试使用Neo4j服务器的独特创建工具,通常可行。

您可以共享完整的堆栈跟踪,也可以查看服务器日志中的任何问题。

相关问题