Używam Spring JPA do wykonywania wszystkich operacji na bazie danych. Jednak nie wiem, jak wybrać określone kolumny z tabeli w Spring JPA?
Na przykład:
SELECT projectId, projectName FROM projects
java
jpa
spring-data-jpa
user1817436
źródło
źródło
Odpowiedzi:
Możesz ustawić
nativeQuery = true
w@Query
adnotacji zRepository
zajęć w ten sposób:Pamiętaj jednak, że mapowanie będziesz musiał wykonać samodzielnie. Prawdopodobnie łatwiej jest po prostu użyć zwykłego odwzorowania, chyba że naprawdę potrzebujesz tylko tych dwóch wartości:
Prawdopodobnie warto przyjrzeć się również dokumentacji Spring Data .
źródło
FIND_PROJECTS
) zvalue
nazwą atrybutu (stąd gdyby to był mój kod, musiałbym go zapisać jako@Query(value = FIND_PROJECTS, nativeQuery = true)
itp.Możesz użyć prognoz z Spring Data JPA (doc) . W twoim przypadku stwórz interfejs:
i dodaj następującą metodę do swojego repozytorium
źródło
Nie podoba mi się szczególnie składnia (wygląda trochę hakersko ...), ale jest to najbardziej eleganckie rozwiązanie, jakie udało mi się znaleźć (używa niestandardowego zapytania JPQL w klasie repozytorium JPA):
Wtedy oczywiście wystarczy dostarczyć konstruktor,
Document
który akceptujedocId
&filename
jako argumenty konstruktora.źródło
W mojej sytuacji potrzebuję tylko wyniku json, a to działa dla mnie:
w kontrolerze:
źródło
Object
niestandardowym interfejsem opisanym przez mpr. działa bez zarzutuW moim przypadku utworzyłem oddzielną klasę encji bez pól, które nie są wymagane (tylko z polami, które są wymagane).
Zamapuj jednostkę na tę samą tabelę. Teraz, gdy wszystkie kolumny są wymagane, używam starej jednostki, gdy wymagane są tylko niektóre kolumny, używam jednostki lite.
na przykład
Możesz stworzyć coś takiego:
Działa to, gdy znasz kolumny do pobrania (i to się nie zmieni).
nie zadziała, jeśli musisz dynamicznie decydować o kolumnach.
źródło
Wydaje mi się, że najłatwiejszym sposobem jest użycie QueryDSL , które jest dostarczane z Spring-Data.
Odpowiedź może brzmieć na Twoje pytanie
Menedżer encji może być Autowiredem i zawsze będziesz pracować z obiektami i klasami bez używania języka * QL.
Jak widać w linku ostatni wybór wydaje się, prawie dla mnie, bardziej elegancki, to znaczy użycie DTO do przechowywania wyniku. Zastosuj do swojego przykładu, który będzie:
Definiowanie ProjectDTO jako:
źródło
W nowszych wersjach Spring można wykonać następujące czynności:
Jeśli nie używasz zapytania natywnego, możesz to zrobić w następujący sposób:
Używając natywnego zapytania, można zrobić to samo, co poniżej:
Szczegółowe informacje można znaleźć w dokumentacji
źródło
Moim zdaniem to świetne rozwiązanie:
i używać go w ten sposób
źródło
Przy użyciu Spring Data JPA istnieje możliwość wybrania określonych kolumn z bazy danych
---- W DAOImpl ----
---- W repozytorium ----
W moim przypadku zadziałało w 100%. Dzięki.
źródło
Możesz użyć JPQL:
lub możesz użyć natywnego zapytania sql.
źródło
Możliwe jest określenie
null
jako wartości pola w natywnym sql.źródło
Możesz zastosować poniższy kod w klasie interfejsu repozytorium.
źródło
Korzystanie z natywnego zapytania:
źródło
Możesz skorzystać z odpowiedzi sugerowanej przez @jombie i:
findAll()
metody w tym celu, ale użyj wybranej przez siebie nazwy;List
parametr sparametryzowany z nowym interfejsem (npList<SmallProject>
.).źródło