Spring Boot
Теория: Сравнение сущностей
Сравнение сущностей обладает своими особенностями, которые значительно влияют на код. В этом уроке вы узнаете, чем сравнение сущностей отличается от обычных Java-объектов.
Объект-значение
Разберем на примере. Ниже мы рассмотрим определение модели City, которая не считается сущностью. В таком случае проверка равенства выполняется на основе значения полей, в этом случае — имени. Если объект А представляет конкретный город, то другой объект с тем же городом — это тот же самый объект А:
В таком случае метод equals() легко реализуется с помощью Lombok:
Для объектов такого рода существует термин Value Object. Это объекты, которые представляют собой какое-то значение — например, адрес. Они сравниваются на основе своего значения или значений набора полей.
Сущность
В отличие от обычных Java-объектов, у сущностей есть идентификация. Другими словами, у каждой сущности есть свой уникальный идентификатор, который обычно представлен числом. Этот идентификатор однозначно указывает, с какой сущностью мы имеем дело независимо от того, совпадает ли содержимое других полей у этих сущностей:
Равенство или неравенство остальных данных этих объектов не имеет значения. Объекты равны только тогда, когда совпадают идентификаторы. Если идентификаторы не совпадают, то объекты не равны.
Реализовать такое поведение можно с помощью той же аннотации @EqualsAndHashCode. Единственное отличие от предыдущего примера состоит в том, что мы явно указываем необходимость сравнения только по идентификатору:



