J'ai récemment travaillé avec Hibernate 3.5 et Spring 3, je suis assez nouveau avec Hibernate et je pensais que la classe HibernateDaoSupport
de Spring rendait Hibernate agréable et facile à utiliser avec mes classes de domaine.
Cependant, lors de la recherche d'une question non liée, j'ai vu quelqu'un mentionner que le HibernateDaoSupport
n'est pas la meilleure façon d'utiliser Spring et Hibernate. Quelqu'un peut-il nous éclairer:
L'utilisation de HibernateDaoSupport
/HibernateTemplate
n'est pas recommandée car elle lie inutilement votre code aux classes Spring.
L'utilisation de ces classes était inévitable avec les anciennes versions d'Hibernate afin d'intégrer la prise en charge des transactions gérées par Spring.
Cependant, depuis Hibernate 3.0.1, vous n'en avez plus besoin - vous pouvez écrire un code sur une API Hibernate standard tout en utilisant des transactions gérées par Spring. Tout ce dont vous avez besoin est de configurer la prise en charge des transactions Spring, d'injecter SessionFactory
et d'appeler getCurrentSession()
dessus lorsque vous devez travailler avec la session.
Un autre avantage de HibernateTemplate
est la traduction d'exceptions. Sans HibernateTemplate
, la même fonctionnalité peut être obtenue en utilisant @Repository
annotation, comme le montre la réponse de Gareth Davis.
Voir aussi:
Pour mon argent, il n'y a rien de mal à utiliser HibernateDaoSupport
. Il n'est pas obsolète au printemps 3.0.
Pouvez-vous fournir le numéro de question que vous avez trouvé, il se peut qu'ils se réfèrent à un cas d'utilisation très spécifique.
L'alternative est d'utiliser le @Repository
annotation. Cela va câbler la même traduction d'exception (l'un des gros avantages de HibernateTemplate
) et vous permet soit d'utiliser votre propre super classe, soit tout simplement pour éviter d'étendre une classe de framework tiers.
@Repository
public class YourFooDao {
@Resource
private SessionFactory sessionFactory;
private Foo get(long id){
return (Foo) sessionFactory.getCurrentSession().get(id);
}
}