Spring Data Neo4J @Index(unique = true)不起作用

时间:2018-09-13 17:33:28

标签: spring-boot neo4j spring-data-neo4j

我想使User节点中的userName属性成为唯一的。 我使用了下面的代码,但它没有在Neo4j数据库中创建唯一约束。

@Property(name = "name")
@Index(unique = true)
private String usreName;

仅供参考,我使用的是Neo4j Server版本:3.3.6(社区)和Spring Boot2。
但是,如果我自己在Neo4j浏览器中创建一个约束,它将起作用。

CREATE CONSTRAINT ON (user:User) ASSERT user.userName IS UNIQUE

是否有一种方法可以强制Spring Data Neo4J创建独特的属性,而无需自己在数据库中创建它们?

3 个答案:

答案 0 :(得分:1)

原因

  

在Spring Data Neo4j 4中,删除了索引管理方面的问题   完整的映射框架。

(来自Index Management in Spring Data Neo4j

解决方案

@Autowired
private SessionFactory sessionFactory;

@PostConstruct
public void createIndexesAndConstraints() {
    Session session = sessionFactory.openSession();
    Result result = session.query("CREATE INDEX ON :User(userName)", Collections.EMPTY_MAP);
}

答案 1 :(得分:1)

您可以通过application.properties

配置自动索引管理器的工作模式
spring.data.neo4j.auto-index=validate # or
# spring.data.neo4j.auto-index=update
# spring.data.neo4j.auto-index=assert

默认模式为none。除此之外,@ meistermeier所说的还适用。

此外,Neo4jOperations在SDN 4中已弃用,并已在SDN 5中删除。使用Session代替操作“靠近”数据库。

答案 2 :(得分:0)

谢谢@ThirstForKnowledg的回答。但是我还有其他3个问题:
1-我正在使用Spring Boot 2,但在我的类路径中看不到Neo4jOperations来导入它。

2-我应该将其放置在我的Entity节点还是另一个bean中?
3-运行两次或两次以上我的应用程序后如何处理?我认为这将是第二次或更多次引发异常。