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)调用之后?否。对不起,我的错。