2010-09-25 43 views
3

J'utilise Hibernate et quelques fois j'ai dû mettre en œuvre l'opération DELETE en cascade de l'objet parent à ses enfants. J'ai utilisé les deux options suivantes.Hibernate cascade vs suppression manuelle

Une option consiste à exposer getChildren() sur l'objet parent, à ajouter l'enfant à la collection d'enfants renvoyée et à permettre à Hibernate de caster automatiquement DELETE. L'inconvénient de cette option est que la collection getChildren() doit être exposée même si elle est uniquement utilisée pour prendre en charge la cascade Hibernate.

Une autre option consiste à rechercher et à supprimer manuellement les enfants dans ParentDao.delete (parent). L'inconvénient de cette option est plus de code personnalisé. Toutefois, cette option peut être plus performante si elle utilise des instructions de suppression par lots.

Quelle approche utilisez-vous le plus souvent? Voyez-vous d'autres avantages et inconvénients?

Répondre

2

Quelle approche utilisez-vous le plus souvent? Voyez-vous d'autres avantages et inconvénients?

-je utiliser en cascade quand j'ai une vraie composition relation (et que vous souhaitez supprimer un nombre relativement faible de dossiers). Cependant, je ne voudrais pas introduire une telle relation juste pour implémenter une suppression, mais utiliser une requête (requête HQL DELETE en vrac ou SQL natif). Selon mon expérience, les avantages l'emportent sur le «coût» du code supplémentaire requis (qui est petit de toute façon).