繁体   English   中英

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

[英]Grails: how to return instance of domain class when using projections

我有一个大约有20个属性的域类。 域类上的findBy会导致执行选择查询,该查询具有从数据库中选择的所有列,当所需的列可能仅为1时,这可能会降低性能。

所以我想到了withCriteria。

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

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

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

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

如果您的域类具有如此多的属性,而您正使用投影来仅获取它们的一部分,则应考虑将域类拆分为多个联接的类。 一个好的设计实践是,每个类只能代表一个单一的抽象。

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

OTOH,如果要选择整个SampleDomain对象(除非它的大多数属性是延迟获取的),那么如何仅选择1列? 听起来还不清楚。

//而且我相信您会获得更多的效果,然后为1条记录选择20个字段。

def whatYouWant = sampleDomainInst[0] 

除非我错过了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM