2010-09-06 11 views

Répondre

2

Ceci n'est pas une relation parent-enfant. Les enfants n'ont qu'un seul parent (l'appartenance au parent). C'est une relation plusieurs-à-plusieurs entre entités indépendantes. C'est une différence importante.

Vous ne pouvez pas réellement supprimer les "enfants" du "parent" directement dans HQL comme c'est le cas actuellement. Ce sont vos options:

  • charger les "parents" dans la mémoire et supprimer le "enfant" de la liste.
  • Ajouter une référence de "l'enfant" aux "parents". Rendre l'autre relation inverse. Il devrait effectivement supprimer automatiquement l'élément dans la table de liens lorsque vous supprimez un «enfant», car le lien appartiendrait alors à «l'enfant».
  • Supprimez le lien à l'aide de SQL natif. Ce n'est pas sympa, mais aussi pas trop mal car c'est un sql standard trivial.
+0

ouais je me rends compte que c'est un mant-to-many, était daft. J'ai ajouté une propriété à 'Child' mais je l'ai simplement rendue privée pour permettre aux suppressions de se ranger automatiquement sans exposer la collection –

1

Pour ce faire, il doit y avoir une relation de quelque sorte, à partir de la Entité enfant.

Ensuite, vous pouvez simplement utiliser cascade-delete pour sa table 3d (je suppose que c'est un plusieurs-à-plusieurs).

+0

ah ah oui, c'est un homme-à-plusieurs. Doh! Y at-il un moyen de le faire sans avoir la relation mappée sur la fin de l'enfant? il n'a pas de sens dans mon domaine. Je suppose que je pourrais le rendre privé mais il se sent comme un hack –

+0

Il semble que cela ait un sens dans votre domaine, car vous avez besoin d'une action sur sa suppression ... Je voudrais simplement l'ajouter aux mappings. Si vous ne voulez vraiment pas faire cela, peut-être vous pouvez définir les cascades sur votre FK dans la base de données ... – Bertvan