Ich arbeite mit Hibernate 4.3.8.Final, Primefaces 6.0 und MySQL-Datenbank 5.7.13. Ich habe eine Tabelle in der Datenbank mit dieser Struktur:Falsche Datumsauswahl in SQL
CREATE TABLE `rents` (
`rent_code` INT NOT NULL AUTO_INCREMENT,
`rent_daystart` datetime default NULL,
`rent_dayend` datetime default NULL,
PRIMARY KEY (`rent_code`)
) ENGINE = innodb CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Und die folgenden Daten mit Eichhörnchen mit der folgenden SQL extrahiert:
select * from rents
rent_code | rent_daystart | rent_dayend
1 | 2016-11-30 16:03:00.0 | 2016-12-01 16:03:00.0
In meinem Java Bean habe ich die folgende Funktion:
public List<Object> getRents(java.util.Date iniDate, java.util.Date endDate){
String SQL="select rent_code from rents where rent_daystart < :inidate and rent_dayend > :enddate";
List<Object> allRecords = null;
Session sesion=HibernateUtil.getSessionFactory().openSession();
try {
sesion.beginTransaction();
Query query = sesion.createSQLQuery(SQL).setDate("inidate", iniDate).setDate("enddate", endDate);
allRecords = query.list();
sesion.getTransaction().commit();
sesion.close();
}
catch (HibernateException he) {
//exception control code
};
return allRecords;
}
ich die Web-App Debugging durchführen und die Daten, dass die Funktion erhält, sind:
**inidate** = 'Wed Nov 30 17:54:00 CET 2016'
**enddate** = 'Wed Nov 30 18:54:00 CET 2016'
Und es gibt keine Aufzeichnung überhaupt.
Wenn ich die gleiche SQL in Eichhörnchen auszuführen, die Art und Weise:
select rent_code from rents where rent_daystart < '2016-11-30 17:54:00' and rent_dayend > '2016-11-30 18:54:00'
Es einen Datensatz zurückgibt.
Ich vermute, dass dies ein Datentypenproblem oder etwas ähnliches ist, aber nach der Recherche im Internet ist es mir nicht klar.
Kann mir jemand helfen?
Vielen Dank im Voraus!
Wenn Sie ein Protokollierungsframework verwenden, versuchen Sie, Hibernate [SQL-Level-Protokollierung] (http://stackoverflow.com/a/2536835/1255737) einzuschalten, um sicherzustellen, dass die Abfrage tatsächlich ausgeführt wird. – rmlan