Bonjour,

J'ai depuis toujours utilisé les Criteria hibernate et je trouve cela plus clair que le HQL (mais bon, chacun ses gouts). Voici un exemple de code que j'ai toujours utilisé :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
public class InstitutionDAOImpl extends HibernateDaoSupport implements InstitutionDAO {
 
    /** {@inheritDoc} */
    @SuppressWarnings("unchecked")
    public List<Institution> getAllSortedInstitution() {
        Criteria criteria = getSession().createCriteria(Institution.class);
        criteria.addOrder(Order.asc("name"));
        return criteria.list();
    }
Je me suis récemment laissé dire que c'était une mauvaise manière de coder, notamment parce qu'on est pas certain que la session retournée par getSession() soit bien fermée après. A la place, on me suggère d'utiliser :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    public List<Institution> getAllSortedInstitution() {
        return (List<Institution>) getHibernateTemplate().execute(new HibernateCallback() {
            public Object doInHibernate(Session session) throws HibernateException, SQLException {
                Criteria criteria = session.createCriteria(Institution.class);
                criteria.addOrder(Order.asc("name"));
                return criteria.list();
            }
        });
    }
Je dois avouer ne pas vraiment bien saisir pourquoi on doit passer par une telle complexité de code, alors qu'en HQL, HibernateTemplate nous offre la très belle méthode "find". Votre méthode DAO prend une seule ligne, ici il en faut maintenant 9...

N'y a-t-il rien de plus simple qui permette d'utiliser les Criteria sans prendre de risques?
Merci pour vos avis!