2010-11-02 3 views
2

juste commencé à utiliser JPA aujourd'hui, donc je suis preety nouveau à elle.
Comment dirait-on
"SELECT login.ID, userID, logInTime, logOutTime, user.ID AS 'uID', surname FROM login, user WHERE login.userID = user.ID" dans JPA?
Je dois joindre deux tables via l'ID utilisateur.
J'ai regardé quelques tutoriels sur le net, mais je ne pouvais pas vraiment trouver la réponse à cela.
Merci!requête SQL à JPA se joint à

+2

Pourriez-vous décrire votre modèle de domaine? Sinon, il est difficile de vous conseiller sur l'écriture de requêtes JPQL. –

Répondre

0

En supposant que la connexion et l'utilisateur sont maintenant des objets, et en supposant également que la relation entre la connexion et l'utilisateur sont qu'un utilisateur a beaucoup de connexions seront somthing comme celui-ci

select 
     L.ID, 
     u.userID, 
     L.logInTime, 
     L.logOutTime, 
     u.ID 
from 
     User U, 
     IN(u.logins) L /*note that the IN makes the inner join between Login and user*/ 

Renember Je suppose la correspondance entre la entités

2

Les requêtes JPQL sont écrites sur des objets et non sur des tables. Il est impossible d'écrire une requête sans savoir quels sont les objets et comment la relation entre eux est définie.

Vous devez d'abord créer des objets Entity représentant un Login et un User. Vous mappez une relation entre eux, puis cela devient la jointure pour la requête.

3

Wildly spéculant Je devinerais que votre modèle de domaine comprend au moins deux entités User et Login avec ce dernier représentant quelque chose comme une session. (Cardinalité User -1: n Session)

Mes entités imaginaires:

@Entity 
class User { 
    @OneToMany(mappedBy="user") 
    private List<Login> logins; 
    ... 
} 

@Entity 
class Login { 
    @ManyToOne 
    private User; 
    ... 
} 

Pour récupérer tous les Login s:

jpql: "from Login" 

(Les objets User associés sont récupérés par Par défaut, au niveau de @ManyToOne, le type de récupération par défaut est la récupération désirée.)

Pour récupérer tous les User s:

jpql: "select u from User u join fetch u.logins" 

(Les objets List<Login> associés ne sont pas récupérés par défaut. Du côté @OneToMany le type de récupération par défaut est fetching paresseux)

Mise en route avec JPA:.. openJPA documentation (Jetez un oeil au chapitre 4 et 5 pour la conception de l'entité et le chapitre 10 pour JPQL Les parties générales JPA du OpenJPA la documentation correspond à toutes les implémentations de JPA.)

PS Ce serait plus facile si vous posiez un peu plus de détails dans vos questions.