LINUX.ORG.RU

Lombok и @EqualsAndHashCode

 , ,


0

1

В проекте с использованием Hibernate пытаюсь избежать генерации кучи boilerplate кода. Пусть это и делается с помощью alt-insert (IDEA), занимает места всё равно много.

Итак, при попытке использовать аннотацию из Project Lombok, а именно @EqualsAndHashCode, на класс, реализующий Serializable, ничего не происходит (т.е. если сделать DeLombok, то методы генерятся). Как я это понимаю? При запуске есть предупреждения от Hibernate:

WARN  [main][hibernate.mapping.RootClass] - HHH000038: Composite-id class does not override equals(): Название.пакета.название.класса

Если с помощью идеи создаю эти методы, предупреждения нет. Очевидно, проблема в отсутствии аннотации @Override, но я не смог найти способ указать аннотацию перед генерируемыми методами. Может, кто сталкивался?

Ответ на: комментарий от ThePretender

Конечно. Судя по всему, в текущей версии Lombok это не реализовано. (и, судя по всему, не будет)

KroArtem ★★
() автор топика

что-то мне подсказывает что эти методы лучше определять явно

rusich
()
Ответ на: комментарий от KroArtem

Ну на сегодня у меня идеи закончились. А вообще, неплохо было бы на ваши классы посмотреть. Что там за составной ключ?

ThePretender
()
Ответ на: комментарий от ThePretender

Проблема не в ключах, а в том, что Lombok не генерирует аннотацию @Override перед методами equals и hashCode. В примерах у них с наследованием классов есть @Override, но, видимо, при реализации интерфейса это не работает.

KroArtem ★★
() автор топика
Ответ на: комментарий от stevejobs

Обычно я так и делаю, но в этот раз решил спросить, может, где-то собака зарыта. У них есть способ передавать аннотации к генерируемым методам, в т.ч. к параметрам методов, однако для @EqualsAndHashCode есть только поддержка передачи аннотаций к параметром методов.

Отмечаю тему как решенную, потому что пока такой поддержки нет. Заведу тикет, но в любом случае этот вопрос быстро не решится.

KroArtem ★★
() автор топика
Ответ на: комментарий от KroArtem

https://github.com/hibernate/hibernate-orm/blob/491d7341ade3cfdc2e7e34c6da7f5...

Вообще рассказы про то что вся проблема в аннотации мне понравились, эдакая магия, так что рекомендую в сорцы не смотреть, а тем более не ставить брекпоинт, а все также искать способ поставить аннотацию, которая в Runtime не видна 8)

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от KroArtem

С чего ты взял, что проблема именно в этом? Аннотация @Override опциональна и без неё перегруженный метод будет прекрасно работать, она нужна только на этапе компиляции (и скорее всего, лень проверять, в рантайме её тупо нет вообще). Вангую, что проблема в неправильной конфигурации этого самого ломбока, т.е. в процессе сборки он не вызывается.

Legioner ★★★★★
()
Ответ на: комментарий от Deleted

Занятно, что слова про магию совпадают с человеком, который откликнулся на тикет. :)

This all should work (I'm using Lombok with Hibernate, too; they both do some magic, but their magic paths don't conflict as Lombok is long done when Hibernate starts).

Рассказы же об аннотации были в попытке выяснить, что не так. Да, я не силен в Hibernate, скрывать не буду.

KroArtem ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.