2009-10-09 7 views

Répondre

8

En ce qui concerne l'utilisation de l'écouteur/intercepteur, j'irais avec l'écouteur - c'est plus flexible en termes d'événements qui peuvent être écoutés. L'objectif principal de l'intercepteur est d'inspecter/modifier les propriétés d'objet avant à un événement (par exemple une suppression); alors que l'écouteur peut être configuré pour écouter l'événement "PostDelete" ou many others.

Cependant, si cette table n'est pas mappée, pourquoi en avez-vous besoin? Vous pouvez le mettre à jour directement dans votre code après avoir appelé delete() (ou après avoir appelé flush() s'il y a une clé étrangère impliquée).

Vous pouvez également le faire dans un déclencheur (éventuellement, selon que les informations nécessaires sont disponibles dans la base de données, bien sûr).

+0

Eh bien hibernate voit une vue et je dois passer dans un ID de session sur la suppression que je ne peux pas passer sur la clause where. Donc, quand hibernate fait la suppression sur la vue, un trigger "au lieu de" s'exécute mais après cela, j'ai besoin de passer l'identifiant de session pour la personne qui vient de supprimer dans la table de base de la vue. Mais cette table de base hibernate ne sait rien, alors sur @PostDelete puis-je faire une insertion/mise à jour sur une table non-orm-ed? –

+0

Va l'essayer come Mon –

+0

@PostDeleteEvent (passé à votre écouteur) s'étend de AbstractEvent (https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/AbstractEvent.html) qui a un getSession() méthode. Vous pouvez donc utiliser 'createSQLQuery()' ou définir votre SQL comme requête nommée et utiliser 'getNamedQuery()', définir les paramètres nécessaires et l'exécuter. Je n'ai pas essayé ceci dans PostDeleteListener spécifiquement, mais je ne vois pas pourquoi cela ne fonctionnerait pas. – ChssPly76

1

Comme je le sais, les intercepteurs sont l'ancienne implémentation de l'équipe d'hibernation et les écouteurs sont la nouvelle version flexible des intercepteurs. Imho son plus facile à utiliser écouteur hibernate comme Intercepteurs.

2

Il semble que beaucoup préfèrent les auditeurs - ils offrent une plus grande liste d'événements et sont plus flexibles, mais il y a des choses qu'Interceptors offrent et que les auditeurs ne proposent pas. Par exemple, si vous souhaitez modifier l'entité avant de l'enregistrer dans la base de données, un Interceptor doit être utilisé.

Questions connexes