6 Stimmen

Wie gruppiere ich nur nach Datum aus dem Datums- und Zeitfeld in JPQL?

Für mysql habe ich eine Abfrage geschrieben wie

SELECT * FROM mytable GROUP BY DATE(dateTimeField)

Aber ich kann die DATE()-Funktion in JPQL nicht nutzen. Hat jemand eine Idee, wie man dieses Problem lösen kann?

3voto

Piotr Gwiazda Punkte 11916

Wenn Sie Hibernate unter der Haube verwenden, können Sie Folgendes ausprobieren:

  1. Erstellen Sie Ihren eigenen Dialekt mit benutzerdefinierter Funktion

    public class CustomPostgresqlDialect extends PostgreSQLDialect {   
        public CustomPostgresqlDialect() {
            super();
            registerFunction("truncate_date",
            new SQLFunctionTemplate(StandardBasicTypes.TIMESTAMP, "DATE(?1)"));
        }
    }
  2. Registrieren Sie Ihren Dialekt in persistence.xml

  3. Verwenden Sie Ihre Funktion in JPQL.

    select p from Post p group by truncate_date(p.dateCreated)

3voto

Anthony Accioly Punkte 20616

Für Hibernate:

Vorschlag 1:

Verwenden Sie cast(dateTimeField as date). Siehe hier.

Vorschlag 2:

Sie können versuchen, die year, month und year HQL-Ausdrücke zu verketten.

Werfen Sie einen Blick auf Zeile 360 von diesem Testfall.

str(year(current_date))||'-'||str(month(current_date))||'-'||str(day(current_date))

Aber schauen Sie sich den generierten SQL-Code an, er könnte (und wahrscheinlich wird) hässlich und langsam sein.

1voto

James Punkte 18499

Wenn Sie EclipseLink verwenden, können Sie die FUNC() Funktion in JPQL verwenden, um eine bestimmte Datenbankfunktion aufzurufen:

Unterstützung für Native Datenbankfunktionen mit FUNC

0voto

Sean Patrick Floyd Punkte 283617

Ich fürchte, das fällt außerhalb des Rahmens dessen, was JPQL bietet. Sie müssen auf Native Queries zurückgreifen.

Hier ist die Liste der verfügbaren Funktionen in JPQL:

Java EE Tutorial 6 > Persistence > JPQL > Funktionsausdrücke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X