Hier ist eine späte Antwort :-), obwohl ich mir nicht sicher bin, ob sich die Dinge geändert haben.
Vor kurzem stieß ich genau auf die gleiche Anforderung und arbeitete mit concat daran herum, d. h. indem ich die Spalten in eine Pseudospalte und dann countDistinct
in die Pseudospalte einordnete.
Aber ich konnte criteriaBuilder.concat
nicht verwenden, weil es JPQL mit ||
für die Verkettung generiert hat, was Hibernate hatte Probleme mit .
Glücklicherweise gibt es @Formula
, also habe ich das Pseudo kartiert Spalte in ein Feld mit @Formula
:
So kann ich endlich das concated
-Feld für CriteriaBuilder.countDistinct
:
Ich wünschte, JPA würde (oder hoffentlich schon) countDistinct
mit mehreren Spalten unterstützen, dann hätte all diese Unordnung vermieden werden können.
Sie können den Hibernate-Dialekt für diese Aufgabe verwenden. Um dies zu tun, erstellen Sie Ihren eigenen Dialekt, der den Dialekt der DB erweitert ( Liste aller Dialekte ) und dann neue Funktion registrieren. Zum Beispiel verwende ich MySQL 5 mit InnoDB-Engine:
%Vor%Fügen Sie nachher eine neue Eigenschaft in persistence.xml hinzu:
%Vor%Und jetzt können Sie diese Funktion verwenden:
%Vor%