Je vais implémenter une fonctionnalité pour mettre à jour un identifiant dans une table après que Hibernate ait effacé mes suppressions. Mais je veux avoir un retour sur l'approche qui est la meilleure. Aussi, la table dans laquelle je mets à jour la valeur, Hibernate ne le sait pas, donc je devrais faire une mise à jour directe de jdbc - est-ce possible?Hibernate: Event Listener ou Interceptor, quels sont les avantages/inconvénients dans la pratique?
Hibernate: Event Listener ou Interceptor, quels sont les avantages/inconvénients dans la pratique?
Répondre
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).
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.
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é.
- 1. NHibernate: différence entre Interceptor et Listener
- 2. Seam/Hibernate validator listener
- 3. Dispatch Event When Listener Is Added - ActionScript3
- 4. Quelles sont les affirmations ou NSAssert bon dans la pratique?
- 5. Quels sont les attributs?
- 6. Quels sont les inconvénients de la génération automatique des classes dans Hibernate?
- 7. Event Listener en Java sans application ayant le focus? (Détection de la clé globale)
- 8. Quels sont les effets de la désactivation des journaux de rétablissement dans Oracle sur les transactions Hibernate?
- 9. Problème dans le contexte Listener
- 10. implement listener
- 11. Quels sont les services .NET?
- 12. EJB Interceptor dans Weblogic
- 13. Quels sont les tags HTML valides dans les flux RSS?
- 14. Quels sont les bons tutoriels Wireshark?
- 15. Apache Felix: Quels sont les bundles d'extension?
- 16. Quels sont les principaux concurrents de Servoy?
- 17. Le paramètre getEntityName de Interceptor n'est pas utilisé. Bug dans Hibernate?
- 18. Quels sont les avantages des différentes endiannesses?
- 19. Quels sont les différents types d'échantillonneurs HLSL?
- 20. Quels sont les meilleurs screencasts liés à la programmation?
- 21. Quels sont les inconvénients des méthodes statiques?
- 22. Quels sont les fichiers .pidb de MonoDevelop?
- 23. Quels sont les deuxièmes moments d'une région?
- 24. Quels sont les avantages de l'utilisation de plpgsql dans postgresql
- 25. Quels sont les symboles soulignés dans une DLL VB?
- 26. Quels sont les problèmes du modèle MVVM?
- 27. Quels sont les meilleurs thèmes Silverlight?
- 28. Quels sont les plugins jQuery "must have"?
- 29. log4net, la journalisation, quels sont les plus grands avantages
- 30. Quels sont les navigateurs compatibles avec "! Important"?
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? –
Va l'essayer come Mon –
@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