Also versuche ich, die mysql datediff-Funktionen zu verwenden, um eine durchschnittliche Anzahl von Tagen zu erhalten, an denen eine Rechnung alt ist.Die native Abfrage von Spring Data/Hibernate gibt NULL zurück, obwohl die echte Abfrage Ergebnisse zurückgibt
Meine Abfrage sieht wie folgt aus:
select avg(datediff(coalesce(nullableDateTimeColumn, now()), i.createdTimeStamp)) from invoice i
where i.createdTimestamp >= DATE_VARIABLE_HERE and (invoiceStatus = 'TEXT_HERE' or nullableDateTimeColumn is not null)
und meine eigentliche Federdaten Repo-Definition sieht wie folgt aus:
@Repository
interface InternalInvoiceRepository extends PagingAndSortingRepository<Invoice, Long> {
@Query(value = "select avg(datediff(coalesce(nullableDateTimeColumn, now()), i.createdTimeStamp)) from invoice i " +
"where i.createdTimestamp >= ?1 " +
"and (invoiceStatus = 'TEXT_HERE' or nullableDateTimeColumn is not null)", nativeQuery = true)
BigDecimal getAverageTimeInvoiceEntryTimeForInvoicesNewerThan(LocalDateTime time);
}
Das Problem ist, dass das Ergebnis immer Null ist, habe ich versucht Einstellung der Rückkehr Geben Sie doppelt ein, aber das hat auch nicht funktioniert. Wenn ich log4j.logger.org.hibernate.SQL
auf DEBUG
setze und auf den SQL-Server schaue, ist der SQL korrekt. Wenn ich den sql starte, bekomme ich eine Nummer zurück, also weiß ich, dass die SQL, die von Hibernate ausgeführt wird, tatsächlich ein Ergebnis zurückgibt. Der Rückgabewert ist ziemlich klein, normalerweise zwischen 0-5, also ist es kein seltsamer Überlauffehler oder irgendetwas anderes. Dies scheint ein einfaches Szenario zu sein, daher bin ich ein wenig perplex darüber, warum das nicht funktioniert.
Versionen:
Spring data: 1.9.2.RELEASE
Spring: 4.2.4.RELEASE
Hibernate: 5.0.7.Final
hibernate-jpa-2.1-api: 1.0.0.Final
, wie das Datum in den Protokollen angezeigt wird, wenn die Abfrage ausgeführt wird? – djointster
@ScaryWombat Ich zeige nur einen Teil des Repos, es gibt eine Reihe von anderen Methoden, aber sie sind in keiner Weise auf dieses Problem bezogen – Zipper
Können Sie bestätigen, dass "i.createdTimestamp" ist "Timestamp" oder "Date" Datentyp. – AppHouze