Wie countDistinct in mehreren Spalten

8

Wie kann ich mithilfe der JPA-Kriterien-API Folgendes tun:

%Vor%

Dies mit einer einzigen Spalte / Pfad zu tun ist einfach mit CriteriaBuilder.countDistinct, aber wie kann ich dies auf zwei Pfade / Spalten tun?

    
Piotr 07.02.2012, 21:21
quelle

3 Antworten

3

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 :

%Vor%

So kann ich endlich das concated -Feld für CriteriaBuilder.countDistinct :

verwenden %Vor%

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.

    
ryenus 28.08.2014, 13:09
quelle
1

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%     
svishevsky 21.07.2015 08:04
quelle
0

Scheint, als ob es keine Möglichkeit gibt, dies mit JPA2 zu tun

    
Piotr 08.02.2012 16:00
quelle

Tags und Links