我想使用户节点中的userName属性是唯一的。我使用了下面的代码,但它没有在Neo4j数据库中创建唯一约束。
@Property(name = "name")
@Index(unique = true)
private String usreName;
仅供参考,我使用的是Neo4j Server版本:3.3.6(社区)使用Sping Boot 2.
但如果我自己在Neo4j浏览器中创建一个约束,它就可以工作。
CREATE CONSTRAINT ON (user:User) ASSERT user.userName IS UNIQUE
有没有一种方法可以强制Spring Data Neo4J创建唯一的属性,而不是自己在Database中创建它们?
4条答案
按热度按时间00jrzges1#
如果希望应用程序代码创建约束,则需要配置自动索引管理器。您可以在文档中找到最适合的选项:https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference:indexing:creation
关于此主题,请注意:想想Hibernate的DDL支持这样的自动索引创建,它是开发时的一个助手,在生产环境中不应该使用
assert
和update
,而应该只使用validate
。n8ghc7c12#
原因
在SpringDataNeo4j4中,索引管理问题完全从Map框架中移除。
(from Spring Data中的索引管理(Neo4j)
溶液
qyuhtwio3#
您可以通过
application.properties
配置自动索引管理器的工作模式默认模式是
none
,除此之外,@meistermeier说的也适用。此外,Neo4jOperations在SDN 4中被弃用,并已在SDN 5中删除。对于“接近”数据库的操作,请改用
Session
。eblbsuwk4#
谢谢你的回答,但我还有3个问题:
1-我使用的是Sping Boot 2,但是在类路径中看不到Neo4jOperations,无法导入它。
2-我应该把它放在我的Entity节点中还是放在另一个bean中?
3-在运行我的应用程序两次或更多次之后呢?我认为这会导致第二次或更多次的异常。