Na przykład, jeśli mamy tabelę książek, w jaki sposób policzymy całkowitą liczbę rekordów książek w trybie hibernacji?
242
W przypadku starszych wersji Hibernacji (<5.2):
Zakładając, że nazwa klasy to Book:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
Jest to przynajmniej Number
, najprawdopodobniej Long
.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
W Javie zazwyczaj muszę zwrócić int i użyć tego formularza:
źródło
Oto, co oficjalne dokumenty dotyczące hibernacji mówią nam o tym:
Możesz policzyć liczbę wyników zapytania bez zwracania ich:
Jednak nie zawsze zwraca
Integer
instancję, dlatego lepiej jest używać jejjava.lang.Number
ze względów bezpieczeństwa.źródło
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )Możesz spróbować
count(*)
Gdzie
Books
jest nazwaclass
- nie tabela w bazie danych.źródło
Jeśli używasz Hibernacji 5+, zapytanie zostanie zmodyfikowane jako
Lub jeśli potrzebujesz TypedQuery
źródło
źródło
Działa to w Hibernacji 4 (Testowane).
Gdzie getCurrentSession () to:
źródło
To bardzo proste, wystarczy uruchomić następujące zapytanie JPQL:
Powodem, dla którego przesyłamy,
Number
jest to, że niektóre bazy danych zwrócą się,Long
podczas gdy inne powrócąBigInteger
, więc ze względu na przenośność lepiej jest rzucić na aNumber
i uzyskać aint
lub along
, w zależności od liczby wierszy, których spodziewasz się policzyć.źródło