Grails:使用投影时如何返回域类的实例
我有一个域类,它有大约20个属性。域类上的findBy会生成一个select查询,该查询包含从数据库中选择的所有列,当所需列只能为1时,这可能会影响性能 所以我想用标准Grails:使用投影时如何返回域类的实例,grails,grails-domain-class,Grails,Grails Domain Class,我有一个域类,它有大约20个属性。域类上的findBy会生成一个select查询,该查询包含从数据库中选择的所有列,当所需列只能为1时,这可能会影响性能 所以我想用标准 def sampleDomainInst = SampleDomain.withCriteria{ projections { property('fieldOne') } eq('id', idVal) } 返回的值是一个列表。但是我需要的是SampleDomain的一个
def sampleDomainInst = SampleDomain.withCriteria{
projections {
property('fieldOne')
}
eq('id', idVal)
}
返回的值是一个列表。但是我需要的是SampleDomain
的一个实例,我该如何做呢
多谢各位。
当做
Jay Chandran投影的目标是不返回域实例。理论上,您可以将“id”添加到projections闭包中,然后可以执行DomainClass.get(id)。但这与完全没有投影的情况下工作是一样的
如果您的域类具有很多属性,那么您使用的是投影只能获得其中的一部分,应该考虑在多个连接类中拆分域类。一个好的设计实践是,每个类只应表示一个抽象。
投影的目标是不返回域实例。理论上,您可以将“id”添加到projections闭包中,然后可以执行DomainClass.get(id)。但这与完全没有投影的情况下工作是一样的如果您的域类具有很多属性,那么您使用的是投影只能获得其中的一部分,应该考虑在多个连接类中拆分域类。一个好的设计实践是,每个类应该只表示一个抽象。
尝试withCriteria(uniqueResult:true){…}
或更长的SampleDomain.createCriteria().get{…}
OTOH,如果您选择的是整个SampleDomain
对象(除非它的大多数属性都是延迟获取的),那么您怎么能只选择一列呢?这听起来不清楚
//我相信,如果为一条记录选择20个字段,您将获得更多的性能点击。尝试withCriteria(uniqueResult:true){…}
或更长的时间,SampleDomain.createCriteria().get{…}
OTOH,如果您选择的是整个SampleDomain
对象(除非它的大多数属性都是延迟获取的),那么您怎么能只选择一列呢?这听起来不清楚
//我相信你会得到更多的性能点击,然后选择20个字段作为一个记录
除非我遗漏了什么
除非我遗漏了什么。很抱歉,我生病了,无法尝试这些建议。我会告诉你事情的进展。很抱歉,我生病了,不能尝试这些建议。我会让你知道事情的进展。
def whatYouWant = sampleDomainInst[0]