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

Had*_*adi 5 neo4j spring-data-neo4j spring-boot

我想让用户节点中的 userName 属性唯一。我使用了下面的代码,但它不会在 Neo4j 数据库中创建唯一约束。

@Property(name = "name")
@Index(unique = true)
private String usreName;
Run Code Online (Sandbox Code Playgroud)

仅供参考,我正在使用 Neo4j 服务器版本:3.3.6(社区)和 Spring Boot 2。
但是如果我自己在 Neo4j 浏览器中创建约束,它就可以工作。

CREATE CONSTRAINT ON (user:User) ASSERT user.userName IS UNIQUE
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 Spring Data Neo4J 创建独特的属性,而无需自己在数据库中创建它们?

mei*_*ier 5

如果您希望应用程序代码创建约束,则需要配置自动索引管理器。您可以在文档中找到最合适的选项: https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference :indexing:creation

关于这个主题的注释:想想像 Hibernate 的 DDL 支持一样的自动索引创建。它是开发时的好帮手。您不应该在生产环境中使用assertandupdate而只能使用validate.


Thi*_*dge 2

原因

在 Spring Data Neo4j 4 中,索引管理问题已从映射框架中完全删除。

(来自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);
}
Run Code Online (Sandbox Code Playgroud)