Question

J'utilise JPQL pour récupérer des données. Je peux obtenir des données en utilisant l'instruction

List persons = null;
persons = em.createQuery("select p.albumName from PhotoAlbum p , Roleuser r 
where r = p.userId and r.userID = 1");

Maintenant, je peux obtenir les noms d'album en utilisant ceci:

int i=0;
for (i=0;i<persons.size(); i++)
{   
     System.out.println("Testing n "+ i +" " +  persons.get(0));
}

Maintenant, je veux obtenir le nom de l'album et la ligne du nom de firstname du roleuser

J'utilise la requête

persons = em.createQuery("select r.firstName , p.albumName from PhotoAlbum p ,   
Roleuser r where r = p.userId and r.userID = 1").getResultList();

Maintenant, comment puis-je obtenir le prenom de lignes et ALBUMNAME comme persons.get (0) renvoie un objet

en exécutant le code:

 for (i=0;i<persons.size(); i++)
    {
        //r = (Roleuser) persons.get(i);
        System.out.println("Testing n "+ i +" " + persons.get(i));
    }

Je reçois ceci:

Testing n 0 [Ljava.lang.Object;@4edb4077
INFO: Testing n 1 [Ljava.lang.Object;@1c656d13
INFO: Testing n 2 [Ljava.lang.Object;@46dc08f5
INFO: Testing n 3 [Ljava.lang.Object;@654c0a43

Comment cartographier les persons.get(0) et obtenir le firstname et albumname?

Était-ce utile?

La solution

  

Maintenant, comment voulez obtenir les lignes FirstName et ALBUMNAME comme persons.get (0) renvoie un objet

Requêtes avec plusieurs select_expressions dans la clause SELECT renvoyer un Object[] (ou un List de Object[]). De la spécification JPA:

  

4.8.1 Résultat Type de clause SELECT

     

Le type du résultat de la requête spécifiée   par la clause SELECT d'une requête est un   entité type de schéma abstrait, un   le type de champ d'état, le résultat d'une   fonction d'agrégat, le résultat d'une   opération de construction, ou certains   séquence de ceux-ci.

     

Le type de résultat de la clause SELECT   est définie par les types de résultats de    select_expressions contenu dans   il. lorsque plusieurs    select_expressions sont utilisés dans la clause SELECT, le résultat de la requête   est de type Object[], et la   éléments de ce résultat correspond à   afin de l'ordre de leur   spécification dans la clause SELECT et   type que les types de résultats de chacun des    select_expressions .

Dans votre cas, vous voulez probablement quelque chose comme ceci:

for (i=0;i<persons.size(); i++) {
    //r = (Roleuser) persons.get(i);
    System.out.println("Testing n " + i + " " + persons.get(i)[0] + ", " + 
        persons.get(i)[1]);
}

Notez que la spécification d'une jointure interne par l'utilisation d'un produit cartésien dans la clause FROM et une condition de jointure dans la clause WHERE est moins typique que de spécifier une jointure explicite sur les relations d'entités (en utilisant la syntaxe [LEFT [OUTER] | INNER ] JOIN). Voir toute la section 4.4.5 Joins dans la spécification.

Références

  • JPA 1.0 Spécification
    • Section 4.8.1 "Type de résultat de la clause SELECT"
    • Section 4.8.2 "Expressions Constructor dans la clause SELECT"
    • Section 4.4.5 "joint"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top