Действительно В спящем режиме всегда нуждаются в методе set, когда существует метод считывания?

Мы имеем, некоторые В спящем режиме методы получателя, аннотируемые обоими @Column и @Basic.

Мы получаем исключение, если у нас нет соответствующего метода set. Почему это?

В нашем случае мы получаем значение, возвращенное на метод считывания (чтобы быть сохраненным в DB), и метод set не имеет никакой функциональной цели. Таким образом, у нас просто есть пустой метод обойти состояние ошибки..

58
задан Marcus Leon 20 April 2010 в 16:08
поделиться

4 ответа

Как уже упоминалось, если вы аннотируете метод получения свойства, то Hibernate использует метод установки при чтении значений из базы данных. По сути, Hibernate предполагает, что все, что он записывает в базу данных, в конечном итоге необходимо будет прочитать из базы данных. Это означает, что если вы аннотируете геттер, он должен вызывать сеттер при чтении объекта из базы данных.

Вы можете сделать установщик приватным (Hibernate будет использовать отражение для доступа к установщику). Это отличный способ сохранить контракт вашего класса, по-прежнему используя Hibernate для реляционного сопоставления.

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

75
ответ дан 24 November 2019 в 19:02
поделиться

Вы должны аннотировать свои классы с помощью @Entity(access = AccessType.FIELD) и аннотировать свои атрибуты. Это должно решить вашу проблему. Сеттер - это лучший способ поддержки рефакторинга. И в чем проблема с наличием маленького сеттера.

9
ответ дан 24 November 2019 в 19:02
поделиться

Hibernate использует метод set для инициализации объекта, который вы читаете из своей БД.

Возможно, если вы сделаете модификаторы доступа для полей объекта по умолчанию или protected или общедоступными , то Hibernate будет инициализировать поля напрямую, без использования установщика (я читал кое-что о но я не уверен, что это работает). Но использование сеттера - гораздо более предпочтительный способ.

1
ответ дан 24 November 2019 в 19:02
поделиться

Если вы этого не сделаете t использовать сеттеры и частные атрибуты, Hibernate должен будет получать поля путем отражения и делать field.setAccessible (true). Я не думаю, что Hibernate так делает.

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

-2
ответ дан 24 November 2019 в 19:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: