Spring Data JPA - Wie kann ich abrufen von Daten aus einer Spalte Datum nur mit Monat und Tag?
Habe ich eine einfache Spring Data JPA-Projekt arbeiten mit mysql, und ich brauche, zu Holen alle Register, die mit dem Tag und dem Monat. Die Spalte die ich brauche, um filter ist vom Typ Datetime.
1935-12-08 00:00:00
Wenn ich das tun möchte in einer db funktioniert es einwandfrei:
SELECT * FROM my_database.event where event_date LIKE '%-12-08%';
Behandelt er das Datum als string an. Jetzt muss ich das in meiner repository-doch nichts scheint zu funktionieren. Ich habe versucht, die basic-one:
List<Event> findByEventDateLike(
@Param("eventDate") Date eventDate);
aber Sie sagt, es gibt eine illegal argument exception, da es ein Date-Objekt. Ich habe versucht, andere Kombinationen, aber anscheinend spring data jpa nicht vergleichen können Termine mit unvollständigen Informationen.
HINWEIS: um es sauber Zu halten versuche ich zu vermeiden, @Query-Sätzen, aber wenn es der einzige Weg zu gehen, ist es eine gültige Antwort.
Wie kann ich es tun?
- Wenn Sie möchten, zu verwenden wie '%%' Sie haben, ändern Sie den Typ auf String
- Wie etwa change-Methode name
findByEventDateGreaterThanAndEventDateLessThan(Date startDate, Date endDate)
- Sie können mehr details finden Sie hier docs.Frühling.io/spring-data/jpa/docs/1.5.0.VERÖFFENTLICHUNG/Referenz/...
- Ja das problem mit, dass in allem, dass ich brauche Sie, um zurückzukehren, so etwas wie "On this day in history", also sollte Es wieder alles, was passierte an diesem Tag durch die Jahre.
- gibt es einen Weg, es zu tun, ohne änderung meiner eventDate Eigenschaft meiner Person? Ich verwende es, wie es in anderen Anrufe.
- könnte sein, erstellen Sie eine native Abfrage und Analyse von Datum auf string wie 2017-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr JPA-provider Hibernate, dann können Sie
year
undmonth
(und andere funcs) in Ihrem JPQL (HQL) - Abfrage, zum Beispiel so:Den code unten funktioniert für ZonedDateTime ("startDate"), nicht die Möglichkeit haben, zu testen, gegen DateTime jetzt:
Verwendung:
Verwenden nativeQuery zu emulieren, die Abfrage in der Datenbank.
Die DB kümmert sich um die Konvertierung zwischen Datums - /Zeichenfolge für die LIKE-Klausel.
Übergabe der Parameter als "- "Monat-Tag" (z.B.: -12-08) wird wieder eine Sammlung der Ereignisse, die mit dieser Zeichenfolge in das Datum-Feld.
Java: Datum in String
Konvertieren von java.util.Datum in String
für mich der einfache Weg ist parse Date zu einem String, aber ich fand eine andere Lösung, die Sie könnten versuchen
%Wie% Abfrage im Frühjahr JpaRepository
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
Mit
findByFirstnameContaining
... , wo x ist.Vorname, wie ?1 (parameter gebunden, eingewickelt in %)