문제

나는 Hibernate (Gorm)를 사용하여 Grails 프로젝트를 진행하고 있습니다. 다음 도메인 모델이 있습니다.

ClientContact {
   static hasMany = [owners: Person]
   static belongsTo = [Person]
}

Person {
   static hasMany = [clientContacts: ClientContact]
}

내가 모든 것을 검색하려고 할 때 ClientContacts 특정 소유자와 함께 (Person), 나는 몇 가지 재미있는 문제에 빠지고 있습니다. 다음 쿼리 기준을 사용하고 있습니다.

def query = {
   owners {
      eq("id", Long.parseLong(params.ownerId))
   }
}
def criteria = ClientContact.createCriteria()
def results = criteria.list(params, query) 

문제는 내가 각각을 통해 반복 할 때 ClientContacts 결과에서 그들은 단지 가지고 있습니다 한 소유자 - 실제로 대부분의 다른 소유자가 있습니다. 무엇을 제공합니까? 나는 최대 절전 모드/gorm이 게으른 페치를 사용한다는 것을 알고 있지만, 나는 그것이 다른 모든 소유자를 ClientContact 내가 그들에게 접근하려고 할 때.

이견있는 사람? 계속 사용하고 싶습니다 목록() 멋진 페이징 기능을 제공하므로 기능합니다.

도움이 되었습니까?

해결책

나는이 스레드가 매우 오래된 것을 알고 있지만 오늘도 정확히 같은 문제를 겪었고 솔루션은 별명을 사용하는 것으로 보입니다.

def query = {
        owners {
                eq("id", Long.parseLong(params.ownerId))
        }
}

하나는 시도 할 수 있습니다 :

def query = {
        createAlias("owners", "o")
        eq("o.id", Long.parseLong(params.ownerId))
}

첫 번째 쿼리는 왼쪽 외부 조인을 생성하고 두 번째 쿼리는 내부 결합을 만듭니다. 자세한 설명은이 링크를 참조하십시오. http://adhockery.blogspot.com/2009/06/querying-by-association-redux.html

다른 팁

두 가지 빠른 관찰 :

  1. Grails 문서화] (http://grails.org/doc/1.0.x/guide/5.%20object%20Relational%20Mapping%20(Gorm).html#5.2.1.3 다수)는 a 다수 협회는 수동으로 코딩되어야하며, 기본 스캐 폴딩은 그렇게하지 않습니다.
  2. 사용해야 할 수도 있습니다 eqId() 기준 - 참조 크리젠 테리 레터 리아

ID와 버전은 모든 Gorm 클래스의 특수 속성입니다. 클래스 선언에 지정할 필요가 없으며 표준 기준을 사용할 수 없습니다.

EQID 기준을 사용해야합니다

   def query = {
          owners {
                eqId(Long.parseLong(params.ownerId))
          }
   }
   def criteria = ClientContact.createCriteria()
   def results = criteria.list(params, query)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top