Hibernate: изменение загруженной сущности после внедрения свойств - PullRequest
0 голосов
/ 21 марта 2011

После загрузки объекта (с помощью загрузки или поиска), непосредственно перед возвратом ответа, я бы хотел изменить объект (фактическую ссылку). Кто-нибудь знает как это сделать? Причина заключается в том, что объект, в который свойства были введены во время загрузки, является объектом построителя. Я пытался использовать PostLoadEventListener, как это:

public void onPostLoad(PostLoadEvent event) {
  Object entity = event.getEntity();
  if(null != entity && entity instanceof MyBuilder){
    MyBuilder builder = (MyBuilder)entity;
    MyActualClass result = builder.build();
    event.setEntity(result);
  }
}

но похоже, что все, что я установил в этом событии, игнорируется и теряется (имеет смысл, так работают события). Единственный оставленный вариант - переопределение EntityPersister, но это так отвратительно! Вы знаете другое, более элегантное решение? Спасибо! Cristian

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Если вы хотите сделать объект только для чтения, тогда вы можете сделать все свои сеттеры protected, и Hibernate будет использовать отражение для их первоначальной установки.Тогда в вашем приложении объект будет фактически неизменным.

Hibernate также позволяет сущностям быть доступными только для чтения , но не обязательно неизменяемыми в смысле Java.

0 голосов
/ 21 марта 2011

вы можете реализовать EmptyIntercepter в Hibernate и предоставить реализацию для метода onLoad, где вы можете делать все, что захотите, сразу после загрузки из базы данных и перед отправкой ответа.

Вы можете получить больше информации об этом здесь http://docs.jboss.org/hibernate/core/3.3/reference/en/html/events.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...