簡體   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