2011-08-02 3 views
3

동적 찾기를 사용하여 GORM으로 일부 열을 제외하는 방법은 무엇입니까?

:

다음과 같은 쿼리를 실행할 수 있기를 바랍니다.

DbDeployment.findAllByFabric("f1", params) 

하지만 열 details (잠재적으로 큰)를 보장하고 싶습니다. 검색되지 않았습니다.

이렇게하는 방법이 있습니까?

+0

[관련] (http://stackoverflow.com/questions/5492833/lazy-column-loading-in-grails-domain-class) [관련] (http://stackoverflow.com/questions/5880564/) 사용-게으른 재산권 페치 -에 - Grails에-GORM) –

+0

위의 두 링크는 ​​[이 메일 링리스트 게시물 (http://grails.1312388.n4.nabble.com/Lazy-fetching-in-just로 안내합니다 유용) -의 도메인 클래스 td1577445.html 온 - ​​속성. 멋진 –

답변

6

옵션 1 : 큰 데이터 필드 (들) this answer에서

한 제안에 대한 연결을 만들은 느리게로드 발생할 별도의 도메인으로 대형 데이터 속성을 분해하는 것이다. 예 : Burt Beckwith에서 좋은 답을 가지고 Grails mailing list question 원래 테이블에

answer on a different question 링크를 새 도메인 + 매핑을 사용하지만, SO의 대답은 제공하지 않습니다

class DbDeployment { 
    Date startDate = new Date() 
    Date endDate 
    ... 
    DbDeploymentDetails details 
} 

class DbDeploymentDetails { 
    String details 
    static belongsTo = DbDeployment 
} 

옵션 2 보기. 후손을 위해서 나는 메일 링리스트에서 자신의 예를 yoink 여기에 넣어 것입니다.

그것은 큰 분야하지 않고 다른 도메인 클래스를 생성 한 후 다른 도메인의 테이블에 매핑하기 위해 static mapping 폐쇄를 사용하는 것입니다.

class DbDeployment { 
    Date startDate = new Date() 
    Date endDate 
    ... 
    String details 
} 

class SimpleDbDeployment { 
    Date startDate = new Date() 
    Date endDate 
    ... 
    // do not include String details 

    static mapping = { 
     table 'db_deployment' 
    } 
} 

그럼 그냥 SimpleDbDeployment에 측정기를 사용할 수 있습니다 : 당신이 메일 링리스트에서 귀하의 예제와 응답을 다시한다면

SimpleDbDeployment.findAllByFabric('f1', params) 

버트, 그것은 큰 것; 나는 너를 신용 할 가치가 있기 때문에, 너의 것을 버리고 너의 것을 버리지 않을 것이다.

+0

, 나는 어쨌든 :) –

+0

정말 고마워요이 방법에 대해 잊었다. 나는 데이터베이스를 '변경'하지 않기 때문에 옵션 2를 좋아한다 (이전 버전과의 호환성을 위해 훨씬 더 좋다). – yan

+0

솔루션 2에서 설명한 단계를 수행하고 원하는대로 작동하는지 확인합니다. 새 테이블을 만들지 않고 적절한 열만 가져옵니다. – yan

관련 문제