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 :

Recherche d'entités par l'id de leurs entités "composants"


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Recherche d'entités par l'id de leurs entités "composants"
    Bonjour à tous, j'utilise hibernate depuis peu de temps pour réaliser un programme de gestion d'élèves/classes/cours. Cela fait plusieurs jours que je suis coincé avec un problème de recherche et je n'est trouvé aucune solution.
    Mon but est de réaliser une recherche permettant de trouver tout les élèves faisant partie des classes (pas classes java mais classes d'école) dont ces dernières doivent posséder un ou plusieurs cours particuliers spécifié par l'utilisateur (donc précisé par leur ids):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Eleve extends Personne{ // personne herite de PojoBase
     
    	@ManyToOne
    	private Classe classe;
    }
     
    public class Classe extends PojoBase {
     
            @OneToMany(mappedBy="classe")
    	private Set<Eleve> eleves = new HashSet<Eleve>();
     
            @OneToMany(mappedBy="classe")
    	private Set<Cours> cours = new HashSet<Cours>();
    }
     
    public class Cours extends PojoBase {
     
    	@ManyToOne
    	private Classe classe;
    }
    Voici ma classe PojoBase (les 3 classes Eleve,Cours et Classe héritent de cette classe qui elle contient l'id):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @Entity
    @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
    public class PojoBase {
     
    	@Id
    	@GeneratedValue(strategy = GenerationType.TABLE)
    	@Column
    	private long id = 0;
    }
    J'ai tenté une recherche avec la classe Restriction comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Criteria criteria = session.createCriteria(Eleve.class); // on souhaite obtenir une liste d'élèves
    criteria.createAlias("classe","alias_classe"); // en regardant leurs classe (d'école)
    long id_cours = 1; // id du cours qu'on connait dont les élèves doivent participer via leur classe (d'école)
    crit.add(Restrictions.like("alias_classe.cours",id_cours)); // org.hibernate.exception.SQLGrammarException: could not extract ResultSet,  java.sql.SQLException: No value specified for parameter 1
    Je me retrouve avec une exception, car je pense que, le Restrictions.like est à utiliser sur des types primitif et ne comprend surement pas que je souhaite qu'il me trouve toutes les entités de type Classe qui contiennent au moins le cours id_cours.

    Comme je suis en pleine découvert d'hibernate, n'hésitez pas à me le dire si j'ai fait n'importe quoi

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    J'ai réussi en utilisant une sorte d'alias imbriqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private static void addSimpleCriter(Criteria crit, Class<?> clazz, Field f, JSONArray subObjectPossibleIds, String alias){
    	String newAlias = (alias != null ? alias + "_" : "") + f.getName();
     
    	crit.createAlias(alias + "." + f.getName(), newAlias);
    	for(int i = 0; i<subObjectPossibleIds.length(); i++)
    		crit.add(Restrictions.eq(newAlias + ".id", Long.valueOf(subObjectPossibleIds.getString(i))));
    }
    Edit: ce code fonctionne pour trouver un objet qui comporte tout les sous objets (dont leurs id sont spécifié dans le tableau json subObjectPossibleIds). Pour trouver un objet qui comporte au moins 1 des objets spécifié, il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Disjunction dis = Restrictions.or();
    for(int i = 0; i<subObjectPossibleIds.length(); i++){
    	dis.add(Restrictions.eq(newAlias + ".id", Long.valueOf(subObjectPossibleIds.getString(i))));
    }
    crit.add(dis);

Discussions similaires

  1. Recherche des fichiers par leurs noms
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 26/05/2011, 12h08
  2. Réponses: 3
    Dernier message: 12/04/2008, 13h38
  3. Recherche qui passe par ts les enregistrements identiques à ce qu'on cherche
    Par lebienestrare dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/09/2006, 13h00
  4. recherche de jointure par requête
    Par vacknov dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2006, 22h21
  5. [Tomcat] répertoire de recherche de fichiers par defaut du tomcat
    Par Julia82 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 26/06/2006, 17h18

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