具有日期对象的属性比较查询在属性不匹配时返回对象

时间:2014-10-27 09:44:22

标签: grails groovy gorm

我在Grails中有一个域类,如下所示:

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
    }
}

其中Client是另一个域类。

在我的测试中,我将2个ActivityEvent对象保存到db:

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)

现在执行时(cname是此方法的参数)

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
]

正如您所看到的,结果集中包含ActivityEventstartTimeStamp不等于endTimeStamp,而我在查询中指定它们需要相等。

当我使用where

运行相同的查询时
ActivityEvent.where {
    client == c &&
    activityName == name &&
    startTimeStamp == endTimeStamp        
}.find()

我得到一个例外org.hibernate.NonUniqueResultException: query did not return a unique result: 2,这并不奇怪,因为findAll也会返回2个对象。

我在查询中遗漏了什么或做错了什么?根据结果​​集的打印输出,一个项目不应该与查询匹配。

0 个答案:

没有答案