#hibernate #jpa #annotations #entitylisteners
#переход в спящий режим #jpa #аннотации #entitylisteners
Вопрос:
Ребята!
Если я определяю класс сущности и аннотирую его с @MappedSuperclass
помощью и @EntityListener
, вызывается ли слушатель также для событий жизненного цикла в дочернем классе?
Пример:
@MappedSuperclass
@EntityListeners(class=LastUpdateListener.class)
public abstract class Animal {
@Id private Integer id;
private String name;
private Calendar dateOfBirth;
@Transient private int age;
private Date lastUpdate;
//getters and setters
/**
* Set my transient property at load time based on a calculation,
* note that a native Hibernate formula mapping is better for this purpose.
*/
@PostLoad
public void calculateAge() {
Calendar birth = new GregorianCalendar();
birth.setTime(dateOfBirth);
Calendar now = new GregorianCalendar();
now.setTime( new Date() );
int adjust = 0;
if ( now.get(Calendar.DAY_OF_YEAR) - birth.get(Calendar.DAY_OF_YEAR) < 0) {
adjust = -1;
}
age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR) adjust;
}
}
public class LastUpdateListener {
/**
* automatic property set before any database persistence
*/
@PreUpdate
@PrePersist
public void setLastUpdate(Cat o) {
o.setLastUpdate( new Date() );
}
}
Спасибо.
Ответ №1:
Да, вызываются методы прослушивателя сущностей LastUpdateListener, аннотированные с помощью @postLoad в сопоставленном суперклассе и LastUpdateListener.
Такой вещи, как событие жизненного цикла для отображенного суперкласса, даже не существует. Как обычно, это относится к подклассу.
Комментарии:
1. Должен сказать, что в настоящее время это невозможно в eclipse toplink из-за этой [ошибки] [1] [1]: bugs.eclipse.org/bugs/show_bug.cgi?id=302194 «жучок»