2015-01-22 2 views
0

다음과 같이 다 대다 관계 및 조인 테이블이있는 두 개의 테이블 대행사 및 카탈로그가 있습니다. 나는 주어진 Agency.id = 3 카탈로그의 목록을 좀하고 싶습니다조인 테이블에 대한 쿼리 선택 - GORM

class Agency{ 
    static hasMany = [catalogs: Catalog] 
    static mapping={ 
    catalogs: joinTable:[name 'agcat'] 
    } 
} 

class Catalog{ 
    String catalog_name  
    static hasMany = [agencies: Agency] 
    static belongsTo = Agency 

    static mapping={ 
    agencies: joinTable:[name 'agcat'] 
    } 
} 

(내 경우는, 카탈로그 1 및 2) 아래의 동적 파인더에 이것을 시도했지만 그것은 나에게 하나 개의 행을 제공합니다.

Agency agency = Agency.findById(id) 
def catalog = agency ? Catalog.findAllById(agency.id): [] 

가입 내 표는 AGAT this-

agency_id|catalog_id 
2    3 
3    1 
3    2 
4    4 

어떤 도움과 같다?

답변

1

는 그것은 바로 거기에, 어떤 쿼리가 필요하지 것 : 나는 get하지 findById을 사용하고

Agency agency = Agency.get(id) 
def catalogs = agency?.catalogs ?: [] 

참고. 그것들은 기본적으로 같은 SQL 쿼리지만, findById은 동적 파인더이며 기본적으로 캐싱을 사용하지 않으며, 캐쉬를 사용하지 않으면 매우 비관적으로 사용합니다 (즉, 많이 지워집니다). get 호출은 항상 캐시됩니다 (적어도 1 차 수준 캐시).

+0

'Catalog.findAllById (agency.id)'가 유효한 쿼리라면'Catalog.findAllByAgency (agency)'를하고 싶을 것입니다. - id가 아닌 객체 내에서 생각해보십시오. –

+0

감사합니다. 그게 도움이! – Hari

관련 문제