Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails:使用投影时如何返回域类的实例_Grails_Grails Domain Class - Fatal编程技术网

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

Grails:使用投影时如何返回域类的实例,grails,grails-domain-class,Grails,Grails Domain Class,我有一个域类,它有大约20个属性。域类上的findBy会生成一个select查询,该查询包含从数据库中选择的所有列,当所需列只能为1时,这可能会影响性能 所以我想用标准 def sampleDomainInst = SampleDomain.withCriteria{ projections { property('fieldOne') } eq('id', idVal) } 返回的值是一个列表。但是我需要的是SampleDomain的一个

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

所以我想用标准

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]