Neo4j SDN - равенство узлов OGM - PullRequest
0 голосов
/ 03 февраля 2020

У меня проблема с Spring Data Neo4j и OGM. Когда я создаю узел в первый раз, это нормально, но если я обновлю sh эту страницу, я получу эту ошибку:

Сбой выполнения шифра с кодом 'Neo.ClientError.Schema.ConstraintValidationFailed' : Узел (126) уже существует с меткой Country и свойством name = 'Страна-1'.

Я искал в Интернете и прочитал так много документов о equals и hashCode но никто из них не помогает. Вот мои классы:

public abstract class Place {

    @Id
    @GeneratedValue(strategy = UuidStrategy.class)
    private String id ;

    private String name ;

    public String getId(){return id ;}

}

@Getter
@Setter
@NodeEntity(label = "Country")
@CompositeIndex(unique = true , properties = "name")
public class Country extends Place {

    private String label = "Country";

    public Country() {}

    @Override
    public int hashCode() {
        int result  = label == null ? 1 : label.hashCode();
        result = 31 * result + this.getName() == null ? 0 : this.getName().hashCode();
        result = 31 * result + this.getId() == null ? 0 : this.getId().hashCode();
        return result;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof Country)) {
            return false;
        }
        Country that = (Country) o ;
        return this.getName().equals(that.getName())
                && this.getId().equals(that.getId())
                && this.getLabel().equals(that.getLabel());
    }
}

Репозиторий по умолчанию. Как я знаю, это проблема проверки на равенство, но как я могу это исправить?

1 Ответ

1 голос
/ 03 февраля 2020

Вы создали ограничение для вашей Country сущности, определив

@CompositeIndex(unique = true , properties = "name")

, и, вероятно, вы также включили функцию автоматического управления индексами в конфигурации Neo4j-OGM SessionFactory. Это не связано с какой-либо реализацией hashCode или equals.

Это также объясняет поведение, с которым вы сталкиваетесь: первый запуск выполнен успешно, но то же самое повторное действие не выполнено.

...