2017-10-11 5 views
1

Je ne suis pas sûr si j'atteins les limites de la requête de méthode avec cette tâche. J'ai deux tables, une table User et une table Password. Un User peut avoir plusieurs Password s (où le plus récent est le courant).Requête de méthode avec plusieurs tables, y compris la commande?

Je voudrais faire une requête de méthode dans mon dépôt User pour aller chercher un "courant" Password pour un nom d'utilisateur.

Dans SQL, il ressemblerait à quelque chose comme ça

"Select FIRST(*) from Passwords INNERJOIN Users ON Users.id=Passwords.userId WHERE Users.username=%s ORDER BY Passwords.created DESC" 

Ce que j'ai essayé comme requête de méthode est findFirstPasswordOrderByPasswords_CreatedByUsers_Username(String username)

qui me donne une exception:

No property byUsers found for type long! Traversed path: UsersEntity.passwords.created.

Je ne Je sais pourquoi il pointe toujours sur le champ created. Est-ce trop pour les requêtes de méthode? Ou est-ce que je le fais tout simplement faux?

Répondre

1

Vous devez définir cette méthode dans le référentiel de mots de passe lorsque vous recherchez un mot de passe. Dans ce référentiel cette méthode ressemblera:

Passwords findFirstByUser_UsernameOrderByCreatedDesc(String username); 

Pour implémenter cette méthode, votre classe d'entité Mot de passe devrait se référer à la table des utilisateurs sur la propriété de l'utilisateur (de la requête)

+0

Est-ce que cela veut dire, que je suis limité à obtenir seulement UserEntities de mon UserRepository? –

+1

Oui, les méthodes de requête dans les référentiels sont limitées à l'entité, auquel le référentiel est connecté. Cependant, vous pouvez utiliser la méthode avec l'annotation personnalisée @Query contenant la requête que vous voulez. –