Hibernate : récuperer la date max

cs_avg Messages postés 97 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 20 août 2011 - 15 août 2010 à 11:44
cs_avg Messages postés 97 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 20 août 2011 - 18 août 2010 à 10:28
Bonjour à tous,

j'ai un table qui contient un ensemble d'article

-chaque article peut avoir plusieurs date de mise en stock

comment je peut récupérer pour chaque article la dernier date

comme exemple

code Article      code Magasin    Date
-------------   -------------    ------
1                           1              10/04/2010 ///ne sera pas récupérer 
2                           1              11/05/2010
1                           1              20/08/2010
3                           2              05/05/2010



aprés réquete on obtient :

code Article      code Magasin    Date
-------------   -------------    ----------
2                           1              11/05/2010
1                           1              20/08/2010
3                           2              05/05/2010




comment faire cette operation avec criteria


j'ai essayer avec ce bout de code qui récupére seulent la derniere date mais c'est pas pour chaque article


Criteria crt = getSession().createCriteria(StockSituationstock.class);
crt.setProjection(Projections.max("datesitu"));
Date aa =(Date)crt.list().get(0);




Merci d'avance
A voir également:

7 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 août 2010 à 11:57
Salut,

Il te faut faire un groupement selon les articles, en SQL ca donnerai un truc du genre :
SELECT Date, codeArticle FROM TaTable ORDER BY Date DESC GROUP BY codeArticle

A toi d'adapter selon tes objets hibernate pour en faire une requête HBQL.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_avg Messages postés 97 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 20 août 2011
15 août 2010 à 17:01
Merci pour votre aide Dark
mais ce bout de code
Criteria crt = getSession().createCriteria(StockSituationstock.class);
crt.setProjection(Projections.projectionList().add(Projections.groupProperty("stockArticle.comp_id.codearti")).add(Projections.groupProperty("stockArticle.comp_id.codemaga")).add(Projections.max("datesitu")));//.addOrder(Order.desc("datesitu"));
 List res=crt.list(); // retourne Liste de type Object et n'accepte pas le                casting
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 août 2010 à 17:15
Salut,

C'est à dire "n'accepte pas le casting" ? Tu as essayé de le caster comment et en quoi ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_avg Messages postés 97 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 20 août 2011
15 août 2010 à 23:02
Bonsoir,

je veut le caster en type Liste de StockSituationstock entity hibernate qui represente une table dans la base données
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
17 août 2010 à 00:17
Salut,

Pour transformer une liste d'objets retournés par Hibernate en liste d'objets spécifiques, as-tu regardé du côté des ResultTransformers?

Un "Transformer" peut soit retourner une Map qui prendra le nom du champ comme clé (et évite ainsi aux personnes travaillant sur les pages de rendu de devoir utiliser un tableau avec données accessibles par indice, ce qui est peu parlant), ou alors transformer la liste d'objets selon un Bean spécifié :

crt.setResultTransformer(Transformers.aliasToBean(BeanVoulu.class));


Il faut juste être sûr que les champs du Bean correspondent aux champs retournés par la requête.

Fanny
0
cs_avg Messages postés 97 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 20 août 2011
17 août 2010 à 09:09
Bonjour HFanny ,

j'ai essayer avec l'instruction de Transformer que vous m'avez dit, le casting ça marche bien mais les champs de bean retournés sont null.
j'ai testé avec l'affichage de la taille de la liste il affiche les nombres de lignes retourner correctement ce qui implique que la réquete criteria marche bien mais les champs de bean retourner sont null


Merci pour votre aide
0
cs_avg Messages postés 97 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 20 août 2011
18 août 2010 à 10:28
Bonjour,

j'ai résolu un peut mon probléme mais j'ai une autre erreur avec la proection sur clé composé

Criteria crt = getSession().createCriteria(StockSituationstock.class);
crt.setProjection(Projections.projectionList().add(Projections.groupProperty("stockArticle.comp_id.codearti")).add(Projections.groupProperty("stockArticle.comp_id.codemaga")).add(Projections.max("datesitu")));//.addOrder(Order.desc("datesitu"));
crt.setProjection(Projections.projectionList().add(Property.forName("datesitu"),"datesitu").add(Property.forName("comp_id"),"comp_id"));
crt.setResultTransformer(Transformers.aliasToBean(StockSituationstock.class));



il m'affiche cette exception

org.hibernate.QueryException: property does not map to a single column: comp_id
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumn(CriteriaQueryTranslator.java:371)
at org.hibernate.criterion.PropertyProjection.toSqlString(PropertyProjection.java:41)
at org.hibernate.criterion.AliasedProjection.toSqlString(AliasedProjection.java:27)
at org.hibernate.criterion.ProjectionList.toSqlString(ProjectionList.java:49)



Merci pour votre aide
pour plus d'information dans le fichier hbm ça marche bien avec le proprety



mais avec le clé composé il m'affiche l'erreur cité précedement

Dans fichier hbm comp_id
<composite-id name="comp_id" class="entity.StockSituationstockPK">
        <key-property 
            name="joursitu" 
            column="JOURSITU" 
            type="java.math.BigDecimal"
            length="22"
        />
        <key-property 
            name="moissitu" 
            column="MOISSITU" 
            type="java.math.BigDecimal"
            length="22"
        />
        <key-property 
            name="annesitu" 
            column="ANNESITU" 
            type="java.math.BigDecimal"
            length="22"
        />
    </composite-id>


Merci pour votre aide
0
Rejoignez-nous