Grails 带有日期对象的属性比较查询在属性不匹配时返回对象
我在Grails中有一个域类,如下所示:Grails 带有日期对象的属性比较查询在属性不匹配时返回对象,grails,groovy,gorm,Grails,Groovy,Gorm,我在Grails中有一个域类,如下所示: class ActivityEvent { String activityName Date startTimeStamp Date endTimeStamp Client client static belongsTo = [client: Client] static constraints = { activityName nullable:false, b
class ActivityEvent
{
String activityName
Date startTimeStamp
Date endTimeStamp
Client client
static belongsTo = [client: Client]
static constraints = {
activityName nullable:false, blank:false, size: 0..50
startTimeStamp nullable:false
endTimeStamp nullable:false
client nullable:false
}
}
其中客户端是另一个域类
在我的测试中,我将2个ActivityEvent对象保存到数据库:
Date now = new Date()
Client c = Client.get("1")
new ActivityEvent(client: c, activityName: "test", startTimeStamp: new Date(now.getTime()), endTimeStamp: new Date(now.getTime())).save(failOnError: true)
new ActivityEvent(client: c, activityName: "test", startTimeStamp: new Date(now.getTime()), endTimeStamp: new Date(now.getTime() + 5 * 60 * 1000)).save(failOnError: true)
现在,当我用c执行时,name是这个方法的参数
ActivityEvent.findAll {
client == c &&
activityName == name &&
startTimeStamp == endTimeStamp
}
我的结果集是:
[
ActivityEvent - name:test from Mon Oct 27 09:37:56 CET 2014 to Mon Oct 27 09:42:56 CET 2014,
ActivityEvent - name:test from Mon Oct 27 09:47:56 CET 2014 to Mon Oct 27 09:47:56 CET 2014
]
如您所见,resultset包含一个ActivityEvent,其startTimeStamp不等于endTimeStamp,而我在查询中指定了它们需要相等
当我使用where运行相同的查询时
我得到一个异常org.hibernate.ununiqueresultexception:query没有返回唯一的结果:2,这并不奇怪,因为findAll还返回2个对象
我在查询中是否遗漏了什么或做错了什么?根据结果集的打印输出,一项不应该与查询匹配。您可以尝试记录SQL查询并查看数据库。我这样做了,SQL查询结果正常,在MySQL Workbench中执行查询也正常。这很奇怪。如果在grails控制台中运行这些标准会怎么样?
ActivityEvent.where {
client == c &&
activityName == name &&
startTimeStamp == endTimeStamp
}.find()