2009-10-09 12 views

Respuesta

8

En cuanto al uso de listener/interceptor, iría con listener, es más flexible en términos de eventos que se pueden escuchar. El objetivo principal del interceptor es inspeccionar/alterar las propiedades del objeto anterior a algún evento (por ejemplo, eliminación); mientras que el oyente se puede configurar para escuchar el evento "PostDelete" o many others.

Sin embargo, si dicha tabla no está asignada, ¿por qué la necesita? En su lugar, puede actualizarlo directamente en su código después de haber llamado a delete() (o después de haber llamado a flush() si hay una clave foránea involucrada).

También puede hacerlo en un desencadenador (posiblemente, dependiendo de si la información necesaria está disponible en la base de datos, por supuesto).

+0

Well hibernate ve una vista y necesito pasar una identificación de sesión en la eliminación que no puedo pasar en la cláusula where. Entonces, cuando Hibernate elimina en la vista un disparador "en vez de", pero después de que esto se ejecute necesito una forma de pasar la identificación de la sesión para la persona que acaba de eliminar en la tabla base de la vista como una forma de auditoría. Pero este hibernate de la tabla base no sabe nada, entonces en @PostDelete ¿puedo hacer una inserción/actualización en una tabla no orm-ed? –

+0

Lo intentaré venir lunes –

+0

@PostDeleteEvent (pasado a su oyente) se extiende desde AbstractEvent (https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/AbstractEvent.html) que tiene una getSession() método. De modo que puede usar 'createSQLQuery()' o definir su SQL como consulta con nombre y usar 'getNamedQuery()', establecer los parámetros necesarios y ejecutarlo. No he probado esto en PostDeleteListener específicamente, pero no veo por qué no funcionaría. – ChssPly76

1

Como sé, los interceptores son la antigua implementación del equipo de hibernación y los oyentes son la nueva versión flexible de los interceptores. Imho es un oyente de hibernación más fácil de usar como interceptores.

2

Parece que muchos prefieren los oyentes: ofrecen una lista más amplia de eventos y son más flexibles, pero hay cosas que los Interceptores ofrecen y los oyentes no.

Por ejemplo, si desea modificar la entidad antes de guardarla en la base de datos, se debe utilizar un Interceptor.

Cuestiones relacionadas