Hibernate : récuperer la date max

Signaler
Messages postés
97
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
20 août 2011
-
Messages postés
97
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
20 août 2011
-
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

7 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
96
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
Messages postés
97
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
20 août 2011

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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
96
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
Messages postés
97
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
20 août 2011

Bonsoir,

je veut le caster en type Liste de StockSituationstock entity hibernate qui represente une table dans la base données
Messages postés
699
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
13 mai 2011
18
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
Messages postés
97
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
20 août 2011

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
Messages postés
97
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
20 août 2011

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