[英]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.