Spring date jpa pobranie daty

0

Witam czy ktoś mógł by napisać jak pobrać z bazy za pomocą jpa ostatnie 30 dat nie powtarzających się, oraz zaczynających się od konkretnej daty.

Chodzi mi o wynik tego zapytania SQL:

 SELECT DISTINCT date FROM history WHERE date <= :podanaData Order By date DESC LIMIT 30;

w postaci List<History> findDistinctTop30ByDateOrderByDate(Date podanaData);

oraz drugie pytanie jak za pomocą jpa odwołać się do obiektu np. mamy obiekt Employee a on w sobie ma History i chcę zrobić coś takiego : findEmployeeByHistoryId(int id);

Z góry dzięki za pomoc.

1

W pierwszym przypadku możesz użyć native query i wrzucić tam swoje zapytanie. Tutuaj przykłady z docu: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_native_queries . O ile chcesz pobrać same daty a nie liste history. Bo trochę Twoje pytanie nie jest spójne najpierw piszesz, że chcesz 30 dat a w metodzie masz List<History>.
W drugim przypadku powinno starczyc zrobić metode findByHistoryId oczywiscie metoda w interface stworzonym dla encji employee.

0

A co jeśli chce zrobić coś takiego w repo history :
findByDateAndEmployeeTeamId
Gdzie :
History.date oraz History.Employee.Team.Id

1

To co napisałeś powinno zadziałać prawidłowo. Nie działa?

0

Znaczy to nie jest przykład z życia po prostu chce się dowiedzieć jak odwoływać do obiektów w obiekcie. A wracając do tego pierwszego to nie da się poprzez samą nazwę metody ? Czy po prostu wygodniej przez nativ.

1

Jeśli chcesz żeby zwrocił liste LocalDate to sie chyba nie da. Jeśli chodzi o liste history to wydaje mi się, że lepszym rozwiazaniem byłoby dodac drugi argument do metody Pageable. Czyli coś takiego: findDistinctByDateBefore(LocalDate date, Pageable page) Tutaj w pageable dajesz strona page 1, size 30 i sort. Pisze z pamięci, więc nie gwarantuje że zadziała. Co do tego którego podejścia użyć to nie wiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1