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?
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?
Wenn Sie Hibernate unter der Haube verwenden, können Sie Folgendes ausprobieren:
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)"));
}
}
Registrieren Sie Ihren Dialekt in persistence.xml
Verwenden Sie Ihre Funktion in JPQL.
select p from Post p group by truncate_date(p.dateCreated)
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.
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 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.