hibernate - prepersist - ¿@EntityListener también funciona con @MappedSuperclass?
prepersist symfony (1)
Sí, el método anotado con @PostLoad en la superclase mapeada y los métodos de escucha de entidad de LastUpdateListener son llamados.
Tal cosa como el evento del ciclo de vida para la superclase mapeada ni siquiera existe. Como de costumbre, se aplica a la subclase.
¡Gente!
Si defino una clase de entidad y la @MappedSuperclass
con @MappedSuperclass
y un @EntityListener
, ¿el oyente también recibe una llamada para eventos de ciclo de vida dentro de una clase secundaria?
Ejemplo:
@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() );
}
}
Gracias.