Grails:如何在使用投影时返回域类的实例

时间:2010-12-15 12:10:16

标签: grails grails-domain-class

我有一个域类,它有大约20个属性。域类上的findBy会生成一个select查询,该查询包含从数据库中选择的所有列,当所需列只能为1时,这可能会影响性能。

所以我考虑使用withCriteria。

def sampleDomainInst = SampleDomain.withCriteria{
    projections {
        property('fieldOne')
       }
     eq('id', idVal)
  } 

返回的值是一个列表。但我需要的是SampleDomain的实例我该怎么做?

谢谢。 问候, 杰伊·钱德兰

3 个答案:

答案 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] 

除非我遗漏了什么。