2010-03-19 4 views
3

Disons que je le mappage suivant:Est-il possible de sélectionner des données avec une valeur maximale pour une colonne en utilisant Critères dans Hibernate?

<hibernate-mapping package="mypackage"> 
    <class name="User" table="user"> 
    <id name="id" column="id"> 
    <generator class="native"></generator> 
    </id>   
    <property name="name" /> 
    <property name="age" /> 
    </class> 
</hibernate-mapping> 

Est-il possible de sélectionner l'utilisateur le plus ancien (qui est l'âge est maximale) en utilisant des critères en veille prolongée?

Je peux imaginer que je pourrais le faire avec 2 sélections. (sélectionnez d'abord le nombre total d'utilisateurs, puis commandez les entrées décroissantes par âge et sélectionnez la première entrée). Mais est-ce possible avec un seul select?

Merci

Palo

Répondre

5

Avec l'API Criteria vous pouvez le faire comme ceci:

session.createCriteria(User.class).addOrder(Order.desc("age")).setMaxResults(1) 
1

quelque sorte. Vous devez commander par âge afin que l'utilisateur le plus ancien soit le premier résultat de votre requête. Ensuite, vous limitez le jeu de résultats à un et renvoyez ce résultat unique.

User oldest = getSession().createQuery("SELECT u FROM User u ORDER BY u.age DESC") 
    .setMaxResults(1).uniqueResult(); 
Questions connexes