我在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)
现在执行时(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
]
正如您所看到的,结果集中包含ActivityEvent
且startTimeStamp
不等于endTimeStamp
,而我在查询中指定它们需要相等。
当我使用where
ActivityEvent.where {
client == c &&
activityName == name &&
startTimeStamp == endTimeStamp
}.find()
我得到一个例外org.hibernate.NonUniqueResultException: query did not return a unique result: 2
,这并不奇怪,因为findAll
也会返回2个对象。
我在查询中遗漏了什么或做错了什么?根据结果集的打印输出,一个项目不应该与查询匹配。