Lombok SuperBuilder Inheritance - PullRequest
       86

Lombok SuperBuilder Inheritance

1 голос
/ 06 апреля 2020

У меня есть класс BaseEntity:

enter image description here

и расширенный класс:

enter image description here

Я пытаюсь построить сеялку, используя строитель:

enter image description here

Я хочу, чтобы Lombok создал конструктор в BreedEntity с базовым классом baseEntity.

Я прочитал документацию, и она прекрасно работает, когда я удаляю аннотацию @entity Документы SuperBuilder

Может кто-нибудь объяснить более подробно, почему это происходит?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Я бы предложил добавить частный конструктор пакета для Hibernate, тогда вы почти достигнете желаемой функциональности.

@NoArgsConstructor(access = AccessLevel.PACKAGE)
BreedEntity
1 голос
/ 06 апреля 2020

Как говорится в ошибке, для Entity должны быть публичные c конструкторы без аргументов.

Библиотека Spring спроектирована таким образом. Допустим, вы делаете запрос BreedRepo.findById(...), следующие вещи происходят

  • Hibernate обращается к драйверу базы данных и получает результат запроса.
  • Создается новый экземпляр класса BreedEntity. (Для этого вам нужен конструктор no arg)
  • Затем все cloumns, зарегистрированные в BreedEntiry, устанавливаются с помощью методов установки. (Вам также необходимо настроить методы установки для каждого @Column)

Вывод: Конструктор Lombok не совместим с Spring JPA. Используйте @Data вместо

Вам придется сделать это не так круто, new затем setX, setY ...

...