Работает ли @EntityListener также с @MappedSuperclass?

#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 «жучок»