Wenn wir beispielsweise eine Tabelle Bücher haben, wie würden wir die Gesamtzahl der Buchdatensätze im Ruhezustand zählen?
242
Für ältere Versionen von Hibernate (<5.2):
Angenommen, der Klassenname lautet Buch:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
Es ist mindestens ein Number
, höchstwahrscheinlich ein Long
.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
In Java muss ich normalerweise int zurückgeben und dieses Formular verwenden:
quelle
Die offiziellen Dokumente zum Ruhezustand sagen uns Folgendes :
Sie können die Anzahl der Abfrageergebnisse zählen, ohne sie zurückzugeben:
Es wird jedoch nicht immer eine
Integer
Instanz zurückgegeben, daher ist esjava.lang.Number
aus Sicherheitsgründen besser, sie zu verwenden .quelle
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )Du könntest es versuchen
count(*)
Wo
Books
ist der Name von derclass
- nicht die Tabelle in der Datenbank.quelle
Wenn Sie Hibernate 5+ verwenden, wird die Abfrage als geändert
Oder wenn Sie TypedQuery benötigen
quelle
quelle
Dies funktioniert in Hibernate 4 (getestet).
Wo getCurrentSession () ist:
quelle
Es ist sehr einfach, führen Sie einfach die folgende JPQL-Abfrage aus:
Der Grund, zu dem wir ein Casting durchführen,
Number
ist, dass einige Datenbanken zurückkehren,Long
während andere zurückkehrenBigInteger
. Aus Gründen der Portabilität ist es daher besser, in ein Casting zuNumber
wechseln und einint
oder ein zu erhaltenlong
, je nachdem, wie viele Zeilen Sie zählen möchten.quelle