Spring Data Neo4J @Index (unique = true) не работает - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу сделать свойство userName в узле User уникальным.Я использовал приведенный ниже код, но он не создает уникального ограничения в базе данных Neo4j.

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

К вашему сведению, я использую версию Neo4j Server: 3.3.6 (сообщество) с Spring Boot 2.
но если я создаю ограничение в браузере Neo4j самостоятельно, оно работает.

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

Есть ли способ заставить Spring Data Neo4J создавать уникальные свойства, не создавая их самостоятельно в базе данных?

Ответы [ 4 ]

0 голосов
/ 18 сентября 2018

Вы можете настроить режим, в котором работает наш менеджер автоматического индекса, через 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 для операций "рядом" с базой данных.

0 голосов
/ 13 сентября 2018

Спасибо @ThirstForKnowledg за ваш ответ.Но у меня есть еще 3 вопроса:
1 - я использую Spring Boot 2, и я не вижу Neo4jOperations в моем пути к классам для его импорта.

2- Должен ли я поместить это в мой узел Entity или в другой bean-компонент?
3- Как насчет того, чтобы запустить мое приложение два или более раз?Я думаю, что это вызовет исключение во второй раз или более.

0 голосов
/ 14 сентября 2018

Вам нужно настроить диспетчер автоматического индекса, если вы хотите, чтобы код приложения создавал ограничения.Вы можете найти лучший вариант подгонки в документации: https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference:indexing:creation

Просто заметка на эту тему: подумайте об автоматическом создании индекса, например о поддержке DDL в Hibernate.Это помощник во время разработки.Вы не должны использовать assert и update в производственных средах, но только validate.

0 голосов
/ 13 сентября 2018

Причина

В 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);
}
...