Grails2.4.4,Hibernate3,mysql:基于日期的查询得到错误的结果

Grails2.4.4,Hibernate3,mysql:基于日期的查询得到错误的结果,hibernate,grails,gorm,mysql-connector,Hibernate,Grails,Gorm,Mysql Connector,我在基于日期字段的查询中得到错误的结果,我有以下域类 class Foo { String fooName Date fooDate static constraints = { } } 那么我有下面的方法 def index() { Date d1 = new Date() Date d2 = new Date() //day 1 of current month 00:00:00 d1.date = 1; d1.hours

我在基于日期字段的查询中得到错误的结果,我有以下域类

class Foo {
   String fooName
   Date fooDate
   static constraints = {
   }
}
那么我有下面的方法

def index() {
    Date d1 = new Date()
    Date d2 = new Date()

    //day 1 of current month 00:00:00
    d1.date = 1;
    d1.hours = 0;
    d1.minutes = 0;
    d1.seconds=0;

    //day 5 of current month 00:00:00
    d2.date = 5;
    d2.hours = 0;
    d2.minutes = 0;
    d2.seconds = 0;

    for(day in d1..d2){
        Foo f = new Foo(fooName:"fooName", fooDate:day);
        f.save(flush:true)
    }
    println "${d1} ${d2}"
    println "search Foo for each day..."
    def fooList
    for(day in d1..d2){
        println "${day}"
        fooList = Foo.findAllByFooDate(day)
        fooList.each{
            println "${it}"
        }
    }

    Date dayAfter
    for(day in d1..d2){
        dayAfter = new Date(day.time)
        dayAfter.date++
        println "foo between ${day} and ${dayAfter}"

        fooList = Foo.executeQuery("FROM Foo where fooDate>=:start and fooDate < :end", [start:day, end:dayAfter])
        fooList.each{
            println "${it} ${it.fooDate}"
        }
    }        
}
请注意,动态查找器findAllByFooDate()没有得到结果

我希望2014年12月1日周一00:00:00到2014年12月2日周二00:00:00之间的“foo”对象是hibernate3test。foo:1(fooDate:2014年12月1日周一00:00:00)不是hibernate3test。foo:2

我正在使用mysql连接器java:5.1.29和hibernate:3.6.10.18

当我切换到mysql连接器java:5.1.22(旧版本)时,我得到以下输出

 search Foo for each day...
 Mon Dec 01 00:00:00 CST 2014
 Tue Dec 02 00:00:00 CST 2014
 Wed Dec 03 00:00:00 CST 2014
 Fri Dec 05 00:00:00 CST 2014

 foo between Mon Dec 01 00:00:00 CST 2014 and Tue Dec 02 00:00:00 CST 2014
 hibernate3test.Foo : 2 Tue Dec 02 00:00:00 CST 2014
 foo between Tue Dec 02 00:00:00 CST 2014 and Wed Dec 03 00:00:00 CST 2014
 hibernate3test.Foo : 3 Wed Dec 03 00:00:00 CST 2014
 foo between Wed Dec 03 00:00:00 CST 2014 and Thu Dec 04 00:00:00 CST 2014
 hibernate3test.Foo : 4 Thu Dec 04 00:00:00 CST 2014
 foo between Thu Dec 04 00:00:00 CST 2014 and Fri Dec 05 00:00:00 CST 2014
 hibernate3test.Foo : 5 Fri Dec 05 00:00:00 CST 2014
 foo between Fri Dec 05 00:00:00 CST 2014 and Sat Dec 06 00:00:00 CST 2014
search Foo for each day...
Mon Dec 01 00:00:00 CST 2014
hibernate3test.Foo : 1
Tue Dec 02 00:00:00 CST 2014
hibernate3test.Foo : 2
Wed Dec 03 00:00:00 CST 2014
hibernate3test.Foo : 3
Thu Dec 04 00:00:00 CST 2014
hibernate3test.Foo : 4
Fri Dec 05 00:00:00 CST 2014
hibernate3test.Foo : 5

foo between Mon Dec 01 00:00:00 CST 2014 and Tue Dec 02 00:00:00 CST 2014
hibernate3test.Foo : 1 2014-12-01 00:00:00.0
foo between Tue Dec 02 00:00:00 CST 2014 and Wed Dec 03 00:00:00 CST 2014
hibernate3test.Foo : 2 2014-12-02 00:00:00.0
foo between Wed Dec 03 00:00:00 CST 2014 and Thu Dec 04 00:00:00 CST 2014
hibernate3test.Foo : 3 2014-12-03 00:00:00.0
foo between Thu Dec 04 00:00:00 CST 2014 and Fri Dec 05 00:00:00 CST 2014
hibernate3test.Foo : 4 2014-12-04 00:00:00.0
foo between Fri Dec 05 00:00:00 CST 2014 and Sat Dec 06 00:00:00 CST 2014
hibernate3test.Foo : 5 2014-12-05 00:00:00.0
这是正确的输出,dynamic finder正在得到结果,日期之间的对象是我期望的对象,你知道为什么mysql connector>5.1.22的任何版本的查询都不能正常工作吗?这是虫子吗?或者我错过了什么


编辑:使用本机SQL查询会得到正确的结果,可能这是hibernate问题?

我会尝试刷新会话。即使在.save(flush:true)调用之后?否。对不起,我的错。