Spring Data budowanie zapytań z kilku tabel.

Spring Data budowanie zapytań z kilku tabel.
O1
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam. Używam w swojej aplikacji Spring Data i mam pytanie. Mam zapytanie, które potrzebuje dwóch tabel User oraz UserRole:

Kopiuj
"select u from User u, UserRole ur where u.id = ur.user.id and ur.name = 'ROLE_EMPLOYEE'"

Czy da się w spring data napisać takie zapytanie za pomocą samej nazwy metody? Czy muszę używać adnotacji @Query tak jak zrobiłem:

Kopiuj
	@Query("select u from User u, UserRole ur where u.id = ur.user.id and ur.name = 'ROLE_EMPLOYEE'")
	List<User> getEmployeeList();

Drugie pytanie. Czy da się zbudować zapytanie w samej nazwie w tym stylu:

Kopiuj
	@Query("select t from Transfer t where t.userAccountFrom.id = :id or t.userAccountTo.id = :id order by t.data DESC")
	List<Transfer> getTransferAccount(@Param("id") Long id); 

Chodzi mi o to

Kopiuj
 t.userAccountFrom.id 

że jeszcze musimy odwoływać się do podpola naszego pola.

NoZi
  • Rejestracja: dni
  • Ostatnio: dni
O1
  • Rejestracja: dni
  • Ostatnio: dni
0

Patrzyłem tam, ale nie znalazłem nic.

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 616
0

Tez nie widzialem joinow...co pokazuje trywialnosc tego rozwiazania

  • Rejestracja: dni
  • Ostatnio: dni
1

Rozumiem że w encjach masz zadeklarowane relacje?
Jak tak to robisz po prostu po nazwach pól czyli finaByUserRoleName(String name)

  • Rejestracja: dni
  • Ostatnio: dni
0

W nazwach metod są również obsługiwane or i and chyba, przetestuj.
Jak coś to masz na youtubie, kanał SpringLabs gdzie jest o spring data po polsku jakiś odcinek

__krzysiek85
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1019
1

W JPQL możesz używać joinów następująco: (przy założeniu, że encja User ma kolekcję roles)

select distinct u from User u left join u.roles ur where ur.name = 'ROLE_EMPLOYEE'

P1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Jeśli chodzi o pierwszy problem, nie jestem do końca pewien odpowiedzi ale spróbuje. Takie coś powinno zadziałać:

List<User> findByUserRoleName(String name);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.