tengo una clase anotada APP que contiene una colección de este modo:PreUpdate no disparar cuando se añade a una colección
@Entity
public class Employee {
@Id
private int id;
@Basic
private String name;
@OneToMany
@JoinTable(name = "ORG", joinColumns = @JoinColumn(name="MINION"),
inverseJoinColumns = @JoinColumn(name="EMP"))
private List<Employee> minions = new ArrayList<Employee>();
@PreUpdate
public void preUpdate(){ ... }
}
Lo que estoy viendo es que si tengo una entidad Employee administrado y agrego que es colección de minions El método preUpdate
no se invoca. Se agrega una nueva fila a la tabla de asignación en el DB, así sé que la actualización está en proceso. Si cambio una propiedad directamente en el Empleado, como el nombre, entonces preUpdate
se activa como se espera cuando se confirma la transacción.
¿Hay alguna manera de hacer que PreUpdate se active cuando se modifique una colección asignada? ¿O hay alguna otra técnica o anotación específica de Hibernate para detectar cuándo ocurre esto?
Estás en lo correcto. PrePersist tampoco ayuda, ya que se activa en INSERT y en este caso la recopilación se modifica una vez que la entidad ya se ha conservado. Supongo que mi pregunta realmente es preguntar si hay técnicas que funcionan de manera similar a PreUpdate para detectar cuándo se modifica una colección mapeada. –
No estoy seguro de lo que quiere decir con "disparado en INSERT". ¿No estás llamando 'entityManager.persist (employee)' para guardar tu colección? Si no está (por ejemplo, confía en flush _only_), tendrá que configurar su propio oyente para uno (o más) eventos "flush"/"auto-flush"/"rubor-entity" (http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/configuration.html#d0e500). O bien, para una solución específica de Hibernate, escriba su propio interceptor (http://docs.jboss.org/hibernate/stable/core/reference/en/html/events.html#objectstate-interceptors) - onFlushDirty() siempre llamado – ChssPly76