#hibernate
#переход в спящий режим
Вопрос:
Я переопределяю Hibernate EmptyInterceptor для захвата некоторых полей свойств, чтобы сделать некоторые украшения.
открытый класс MyEntityInterceptor расширяет EmptyInterceptor Мне нужно получить доступ к
поля при сохранении и при чтении. Мои методы OnSave и onLoad такие, как показано ниже. Но мой
поля сущности возвращают значение null. Пожалуйста, дайте мне знать ваши отзывы и что я здесь упускаю?
public boolean onLoad(Object entity,Serializable id, Object[] state,String[] propertyNames, Type[] types)
throws CallbackException{
Persistable entity = (Persistable) entity;
System.out.println("===============>" entity.getCreatedBy());//returns null
return true;
}
public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
if (entity instanceof IPersistable) {
IPersistable entity = (IPersistable) entity;
System.out.println("Created By=================>" ((IPersistable) entity).getCreatedBy());//Returns null
}
return (true);
}
Ответ №1:
Метод onLoad вызывается непосредственно перед инициализацией объекта.Обратитесь к API.
http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Interceptor.html . Объект будет
пустой неинициализированный экземпляр класса. Это причина, по которой вы получаете нулевой вывод. То, как вы
свойства захвата неверны. Состояние объекта [], имена свойств строки [] являются ключевыми
параметры следует использовать, если вы хотите иметь дело с передаваемыми параметрами. Состояние приходит с
список значений и имена свойств представляют список полей. Пожалуйста, повторите state[] array ,
затем вы получите ожидаемые значения. Дайте мне знать, если вам понадобится дополнительная помощь.