orouits wrote:
Appeler le service de bas niveau via un intercepteur Hibernate au moment du flush casse l'algorithmique métier implémentée par les 2 couches de services car le flush est contrôlé par Hibernate et non piloté par l'algorithmique explicite.
Je ne comprends pas ton inquiétude. Tu as un comportement transverse de persistence d'une entity et tu as la possibilité de plugger des vérifications lors de ces appels transverses. Cela ne casse aucun algorithme métier.
C'est le même type d'architecture que l'on a utilisé pour Hibernate Validator: une déclaration des contraintes et une implémentation qui se fait exécuter lors des evenements pre-insert et pre-update.
Si tu ne veux pas qu'Hibernate persiste les changements d'objets faits dans tes couches haut niveaux, travaille sur des objets détachés et oblige tes couches hautes à les réattacher via des appels aux couches basses. Evidemment tu perds beaucoup des optimisations inhérentes au cache de premier niveau d'hibernate.
PS: ton service de haut niveau pourras toujours créer une connection JDBC et passer derriere ton dos pour changer des valeurs en bases. Si, fondamentalement, tu ne crois pas en ton équipe de dev, fait tout toi même.