2012-12-17 1 views
0

J'ai deux tables: Clients et Commandes, c'est une relation @OneToMany du Client aux Commandes, un client a beaucoup de Commandes. les commandes de table contiennent: idCommand, date, nameCommande, idCustomer. les clients de la table contiennent: idCustomer, nameClient, email. Tous les JPA et EJB sont configurés et je peux facilement obtenir une liste de Commandes ou Clients utilisant une requête HQL dans un bean géré et les lister dans un JSP en utilisant ce code.Obtenir une liste d'objets à partir d'une requête HQL avec joint

public List<Commande> selectAllCommandes() { 
    List<Commande> commandes = em.createQuery("select c from Commande c").getResultList(); 
     return commandes; 
} 
public List<Customer> selectAllCustomers() { 
    List<Customer> customers = em.createQuery("select cu from Customer cu").getResultList(); 
    return customers; 
} 

Comment puis-je joindre les deux tables avec la colonne idCustomer de manière à afficher le nom du client à la place de son id? Je l'ai utilisé cette requête HQL

SELECT c.date, c.name Commande, cu.nameClient FROM Commande AS c, Customer AS cu WHERE cu.idCustomer = c.idCustomer

Mais je ne sais pas sur le type List<> que je dois utiliser pour obtenir le résultat/

+0

@AndroidLearner: API/bibliothèque/framework/noms de logiciels comme "JSF", "EJB", "JPA", "JSP", etc ** ne sont pas ** code! Veuillez arrêter de les formater en code. Ne mettez en forme que des phrases que vous utilisez également dans le code. – BalusC

+0

@BalusC: Je vais garder dans mon esprit.Merci pour votre précieuse suggestion ... :) – AndroidLearner

Répondre

1

Si vous associez la relation inverse dans l'entité Commande. ..

public class Commande { 
    ... 

    @ManyToOne(mappedBy="commande") 
    private Client client; 

    // getter and setter ... 
} 

(ici, mappedBy est d'obtenir le nom de la propriété @OneToMany mis en place au autre côté de la relation)

Puis, après l'exécution de votre requête SELECT c FROM Commande c vous obtiendrez une liste des objets Commande, et pour chacun d'entre eux, vous pouvez obtenir le nom du client à l'aide: thisCommande.getClient().getName().

+0

l'a obtenu, son fonctionnement maintenant, merci beaucoup – user1709976