J'ai un utilisateur qui a un certain nombre de rôles. L'utilisateur est lié aux rôles à l'aide d'une table d'entité de liaison. J'ai défini le fichier de configuration sur cascade Supprimer les entités de liaison de rôle d'utilisateur lorsqu'un utilisateur est supprimé.
Nous utilisons actuellement Soft Suppr pour supprimer des entités. Nous avons ajouté un auditeur d'événements Soft Supprimer qui est déclenché par une suppression. Lorsqu'une entité est supprimée, elle déclenche l'événement code> deletéentity code> qui marque l'entité comme supprimé. P>
Nous avons également une substitution de remplacement de l'événement Si je crée un utilisateur sans aucun rôle, supprimez-le, tout fonctionne bien (cela fonctionne également si une cascade handicapée). Toutefois, si j'ai un utilisateur avec au moins un rôle attribué et que je supprime l'utilisateur, après l'appel à expulser dans J'ai essayé, dans Des idées sur la façon de le résoudre? p> p> OnPostUpdate CODE> pour supprimer Les entités de la cache en appelant expulser sur l'entité. p>
ongostupdate code>, je reçois une exception NHibernate "Nhibernate.ASSERTIONNEFAILURE: ACCÈS POSSIBLE NONTHADEDSAFE à Session". P>
Onpostupdate code>, pour utiliser la session enfant pour expulser l'entité, l'exception n'est pas lancée, toutefois, l'entité n'est pas expulsée. P> < Pré> xxx pré>
3 Réponses :
a trouvé quel était le problème. Utiliser Soft Suppr Delete déclenchera réellement la mise à jour pour définir le drapeau ISDOTED. En raison de cette ligne dans une mappage
cascade="persist, merge, save-update, delete, lock, refresh"
J'ai couru dans le même problème, mais puisque j'utilise des mappages fluides, il n'y a aucune option pour exclure expulser code> de la cascade. Ma solution consistait à éviter appeler
expulser code> et simplement supprimer l'entité du cache de session:
Selon https://forum.hibernate.org/viewtopic.php?p= 2424890 Une autre façon d'éviter cela est d'appeler essentiellement
session.save(s); session.flush(); // allow evict to work session.evict(s);
C'était aussi mon problème, bien que j'utilisais Hibernate via l'interface JPA et j'avais affaire à EM.Persist (...), Em.Flush () et Em.Detach (...).
Donc, le cas est "une entité nouvellement créée a été détachée (expulsée) de la session avant d'être enregistrée à la DB"