@Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate)

Avalon

Bekanntes Mitglied
Ich arbeite gerade an eine Standard Projekt (Übung) mit Spring Boot (Web, JPA, Hibernate, Thymeleaf, MVC) und versuche in der Anwendung mit der Annotation @Query eine native SQL Abfrage zu erstellen. Ziel ist es aus einer Tabelle die Summe von Beratungszeiten zu ermitteln und im Browser anzuzeigen. Ich habe die Abfrage in HeidiSQL erstellt und dort funktioniert sie auch einwandfrei.
SQL:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(betreuungszeit))) FROM vermittlungsdienst_.beratung;
Diese Abfrage liefert direkt in HeidiSQL
Code:
49:35:00
Was auch korrekt ist. Wenn ich diese Abfrage aber in der Anwendung nutze
Java:
@Repository
public interface BeratungRepo extends JpaRepository<Beratung, Long> {
   
    @Query(value = "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(betreuungszeit))) FROM vermittlungsdienst_.beratung", nativeQuery = true)
    LocalTime findSummeBearbeitungszeit();

}
bekomme ich
Code:
01:35:00
geliefert.

Weiß jemand wo hier mein Fehler liegt und kann mir helfen?
 

Robert Zenz

Top Contributor
Um nochmal kurz auszuholen, du erkennst den Fehler auch wenn du dir die Werte ansiehst:

Code:
  49:35:00
- 01:35:00
----------
  48:00:00
==========

Zufaellig ist der Unterschied genau 48 Stunden, was auf 2x24 Stunden schlieszen laesst, was also ein Ueberlauf waere. Natuerlich kannst du das dann auch noch mit anderen Werten verfizieren.

Desweiteren kann man sich dann noch die Javadoc fuer LocalTime ansehen, dort steht relativ deutlich:

A time without a time-zone in the ISO-8601 calendar system, such as 10:15:30.

Wohingegen wenn man sich zum Beispiel Period durchliest:

A date-based amount of time in the ISO-8601 calendar system, such as '2 years, 3 months and 4 days'.

Oder auch Duration:

A time-based amount of time, such as '34.5 seconds'.

Also was du willst ist offensichtlich Duration, denn du willst eine Zeitspanne, nicht eine Uhrzeit oder eine Spanne zwischen zwei Daten.
 

Avalon

Bekanntes Mitglied
Dein erster Post hat mich schon auf den richtigen Weg geführt. Mit Localtime war alles bisher unauffällig, weil keine Beratung länger als 24h dauert. Daher habe ich das nicht bemerkt, hat ja alles wunderbar funktioniert. Erst nach deinem Post und dem Versuch die Zeiten zu addieren, viel es mir wie Schuppen von den Augen. Jetzt habe ich aber das Problem, das die Daten in der DB im Zeitformat 03:20:00 vorliegen. Jeder Versuch die Zeit mit @Query als Periode oder Duration zu holen schlägt fehl. Teilweise mit einer Fehlermeldung, daß nicht gecastet werden kann, teilweise das nicht konvertiert werden kann. Ich sehe mir jetzt erstmal die Rückgabewerte von @Query an. Mal sehen, was da überhaupt an Datentypen von der DB kommen können.
 

Ähnliche Java Themen

Neue Themen


Oben