我想使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创建独特的属性,而无需自己在数据库中创建它们?
答案 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-运行两次或两次以上我的应用程序后如何处理?我认为这将是第二次或更多次引发异常。