我有一个域类,它有大约20个属性。域类上的findBy会生成一个select查询,该查询包含从数据库中选择的所有列,当所需列只能为1时,这可能会影响性能。
所以我考虑使用withCriteria。
def sampleDomainInst = SampleDomain.withCriteria{
projections {
property('fieldOne')
}
eq('id', idVal)
}
返回的值是一个列表。但我需要的是SampleDomain
的实例我该怎么做?
谢谢。 问候, 杰伊·钱德兰
答案 0 :(得分:0)
预测的目标是恕我直言,不要返回域实例。从理论上讲,您可以在投影闭包中添加“id”,然后可以执行DomainClass.get(id)。但这与完全没有预测的工作相同。
如果您的域类具有如此多的属性,而您正在使用投影来仅获取其中的一部分,则应考虑在多个已连接的类中拆分域类。一个好的设计实践是每个类只应代表一个抽象。
答案 1 :(得分:0)
尝试withCriteria(uniqueResult: true) {...}
或更长,SampleDomain.createCriteria().get {...}
。
OTOH,如果您选择整个SampleDomain
对象,除非大多数属性都是懒惰的,否则如何只选择1列?这听起来不太清楚。
//我相信你会获得更多的性能点击,然后为1条记录选择20个字段。
答案 2 :(得分:0)
def whatYouWant = sampleDomainInst[0]
除非我遗漏了什么。