IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Association avec Criteria


Sujet :

Hibernate Java

  1. #1
    Membre du Club Avatar de lamis2009
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Points : 67
    Points
    67
    Par défaut Association avec Criteria
    Bonjour,

    j'ai deux tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Article(numArticle,libelle)
    Stocker(id,numArticle,date)
    j ai besoin de faire une recherche dans la table stocker mais en prendre en consideration le champ libelle de la table article
    cad je veux recuperer les articles stockés qui ont un libelle contenant une certaine chaine "xxx"

    D'habitude je travail sur une seule table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Criteria criteria=session.createCriteria(Stocker.class);
    		 criteria.add(Restrictions.eq("date",date));
     Criteria criteria2=session.createCriteria(Article.class);
    		 criteria2.add(Restrictions.eq("libelle",libelle));
    Mais j'ai besoin de faire la liaison entre les deux table(numArticle soit le meme)

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Essaie ça et regarde la doc à ce sujet :
    http://docs.jboss.org/hibernate/stab...a-associations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Criteria criteria=session.createCriteria(Stocker.class).add(Restrictions.eq("date",date)).createCriteria("article").add(Restrictions.eq("libelle",libelle));
    Pour peu que article soit l'attribut de ta classe Stocker mais comme tu ne donnes pas ton mapping...

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu peux faire directement référence à la propriété fille dans ta requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Criteria criteria = session.createCriteria(Stocker.class);
    criteria.add(Restrictions.eq("article.libelle",libelle));
    Il faudra peut-être ajouter un alias (criteria.createAlias(..., ...))

  4. #4
    Membre du Club Avatar de lamis2009
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Points : 67
    Points
    67
    Par défaut
    j'utilise le portail liferay et j'ai essayé vos solution mais ça m'a declenché cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.QueryException: could not resolve property: Article of: com.ext.portlet.login.model.impl.StockerImpl

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Donne nous ton mappgin, on ne peut pas inventer le nom de ta propriété qui mappe ta table article.

  6. #6
    Membre du Club Avatar de lamis2009
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Points : 67
    Points
    67
    Par défaut
    le mapping est declaré dans le fichier service.xml, voila le fichier et les noms des proprietes sont les memes des colonnes des tables:
    Article(numArticle,libelle)
    Stocker(id,numArticle,date)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <entity name="Stocker" local-service="true">
            <column name="id" type="String" primary="true" />
            <column name="numArticle" type="String" />        
            <column name="date" type="Date" />
    </entity> 
    <entity name="Article" local-service="true">        
            <column name="numArticle" type="String" primary="true" />        
            <column name="libelle" type="String" />      
    </entity>

  7. #7
    Membre régulier Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Points : 83
    Points
    83
    Par défaut
    Bonjour

    D'après ton fichier de mapping, j'ai l'impression que tu n'as pas de clé étrangère dans ta table Article, sinon ton objet Article possèderait une propriété de type Stocker.
    Du coup, c'est plus compliqué pour faire des jointures entre tes tables...

    As-tu la possibilité d'ajouter une clé étrangère en base et de modifier ton mapping?

  8. #8
    Membre du Club Avatar de lamis2009
    Inscrit en
    Janvier 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 133
    Points : 67
    Points
    67
    Par défaut
    oui exactement je ne peux pas ajouter une clé étrangère. ceci n'est pas pris en compte dans le fichier service.xml.

  9. #9
    Membre régulier Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Points : 83
    Points
    83
    Par défaut
    Si tu ne peux pas modifier ta base et ton mapping, je ne vois pas comment faire autrement qu'avec du SQL natif.

    Si quelqu'un d'autre sait, je suis curieux de savoir

    Pour le SQL natif, tu vas avoir besoin de ça :
    http://docs.jboss.org/hibernate/core.../querysql.html

    Et pour la requête :
    select * from article, stocker
    where article.numArticle = stocker.numArticle
    and article.libelle like '%xxx%'

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Effectivement, vu le mapping...

    Tu peux utiliser avantageusement addEntity pour laisser Hibernate mapper le résultat de ta requête vers les instance de la classe d'entité cible.
    Un truc dans le genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQLQuery query = session.createSQLQuery("select * from Stocker where numArticle in (select numArticle from Article where libelle like ?)");
    query.addEntity(Stocker.class);
    query.setString(0, "blabla");
     
    List<Stocker> list = query.list();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/01/2013, 11h16
  2. [Liferay] Exception lors d'utilisation des associations avec criteria
    Par lamis2009 dans le forum Portails
    Réponses: 0
    Dernier message: 17/06/2010, 18h09
  3. probleme avec le mapping d'association avec hibernate
    Par senediene dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/08/2006, 13h59
  4. Association avec données réalisant 2e association
    Par Matth_S dans le forum Schéma
    Réponses: 4
    Dernier message: 10/02/2006, 12h55
  5. [JSTL] Association avec le jar ?
    Par MicroPuce dans le forum Taglibs
    Réponses: 5
    Dernier message: 07/01/2006, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo