2

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

所以我想到了使用,withCriteria。

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

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

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

4

3 回答 3

0

投影的目标是恕我直言,不要返回域实例。从理论上讲,您可以在投影闭包中添加“id”,然后您可以执行 DomainClass.get(id)。但这与完全没有投影的情况相同。

如果您的域类具有如此多的属性,以至于您使用投影来仅获取其中的一部分,则应考虑将域类拆分为多个连接的类。一个好的设计实践是每个类应该只代表一个抽象。

于 2010-12-15T13:13:33.163 回答
0

尝试withCriteria(uniqueResult: true) {...},或者,更长,SampleDomain.createCriteria().get {...}.

OTOH,如果您选择整个SampleDomain对象(除非它的大部分属性都是延迟获取的),您如何只选择 1 列?这听起来不清楚。

// 而且我相信你会得到更多的性能命中然后为 1 条记录选择 20 个字段。

于 2010-12-15T13:19:24.413 回答
0
def whatYouWant = sampleDomainInst[0] 

除非我错过了什么。

于 2011-06-14T01:23:00.100 回答