Aktywne Wpisy
maikeleleq +3
Pytanie bez ściemniania
Ile wasze auta palą w mieście? Sprawdźmy kto robi najoszczędniejsze silniki ( ͡° ͜ʖ ͡°)
Na codzień jeżdżę Cuprą Formentor, 1.5TSI 150km, spalanie w okolicach 9.8L - 11L, jeżdżę tylko po Poznaniu co jest dość ważne jeśli chodzi o korki ( ͡° ͜ʖ ͡°)
#motoryzacja #samochody
Ile wasze auta palą w mieście? Sprawdźmy kto robi najoszczędniejsze silniki ( ͡° ͜ʖ ͡°)
Na codzień jeżdżę Cuprą Formentor, 1.5TSI 150km, spalanie w okolicach 9.8L - 11L, jeżdżę tylko po Poznaniu co jest dość ważne jeśli chodzi o korki ( ͡° ͜ʖ ͡°)
#motoryzacja #samochody
120_Dni_Sodomy +302
Samo zapytanie wiem jak wykonać, ale nie wiem zaprojektować klasy etc. Napisać metodę w PerformanceRepository typu getTop i zwracać... no właśnie co zwracać? Napisać dodatkową klasę (nie model) PerformanceWithNumberOfSoldTickets i zwracać listę obiektów tejże klasy? Czy może dodać podobny model bez tabeli w bazie danych i znowu zwracać listę?
#programowanie #java #spring
@Entity
@NamedQueries({
@NamedQuery(name = Performance.TOPPERFORMANCE, query = "from Performance p order by size(p.tickets))})
@OneToMany
private List> tickets;
...
Service:
@Transactional
public List getTopPerformances(){
return dao.getTopPerformances();
}
DAO: (extends JpaRepository)
@Query(Performance.TOPPERFORMANCE)
public List getTopPerformances(){
...
}
To taki najprostszy szkielet, w namedqueries mozesz podac parametry (np date albo ile rekordow ma wyciagac) a potem podstawisz te parametry w dao.
"select s.performance.name ,s.name ,s.date from Show s where s.date = :jakasData order by size(s.tickets)"
a potem to sobie mapujesz resulttransformerem na jakis obiekt widokowy czy cos,
SELECT p.id, count(p.id) AS total FROM performance p JOIN show s ON s.performanceid = p.id JOIN ticket t ON t.showid = s.id WHERE s.date BETWEEN ?1 AND ?2 AND t.category = ?3 GROUP BY p.id, ORDER BY count(p.id) DESC
http://www.oracle.com/technetwork/java/dataaccessobject-138824.html
|
Query q= entityManager.createNativeQuery("twoj sql");
q.getResultList(); // zwróci Ci listę tablic obiektów czyli List
Przeiteruj sobie tą listę i przypisz do obiektów przekazywnych do widoku
for(Object[] o: lista){
MojObiekt obj = new MojObiekt();
obj.setId(o[0]);
obj.setValue(o[1]);
}
http://pastebin.com/TRjvXk5H
Bardzo dobre rozwiązanie w przypadku, gdy do zapytania czasami przekazujesz, a czasami nie, różne parametry. Rozwiązanie na pierwszy rzut oka wydaje się skomplikowane, ale daje bardzo dużą elastyczność.
Stałe zapytania, do których zawsze wstawiasz parametry dobrze jest robić w NamedQuery, bo te zapytanie jest transformowane na SQL w momencie kompilacji projektu i jest po prostu szybsze. ( ͡° ͜ʖ ͡°)