2011-07-31 2 views
0

나는 너희들이 나를 도울 수 있기를 바랍니다. 구글은 불행히도 나를 데 도움이 유래에서 여기 내 검색이 나는 대다 관계.Grails 다 대 다수 - 동적 파인더의 문제점

두 DomainClasses HumanResource작업

:-(도하지 않았다 않았다 모델 정의 :

작업 :

class Tasks { 

    String name 

    static belongsTo = [HumanResource] 
    static hasMany = [humanResources: HumanResource] 
    //also tried but didn't help -> static fetchMode = [humanResources:"eager"] 
} 

HumanResource : 나는 또한 매핑 아이디 필드에 인덱스를 추가하려고

class HumanResource { 

    String name 

    static hasMany = [tasks: Tasks] 

} 

= {}하지만 난 또한, 그것은 도움이되지 않았다 해결책이 아니다 생각 나는에 인덱스가 이미 있다고 생각 id-field.

그래서 내가 한 일은 아니지만 주어진 일에 필요한 모든 인적 자원을 찾을 수 있습니다. 그리고 그 업무는 서비스에서 나오고 "정적 fetchMode = [tasks :"eager "]"를 사용하여 서비스 모델에서 이미 가져 왔습니다!

컨트롤러 - 코드 :

def listHumanResourcesFromTasks = { 
     def list = HumanResource.findAllByTasks(service.getTasks()) 

     //and I tried also with an own HashMap but didn't work as well 

} 

나는 항상 SQL-GrammarException에 오류 "org.springframework.dao.InvalidDataAccessResourceUsageException"를 얻는다. 그러나 나는 정말로 이유를 모른다. "service.getTasks()"객체는 완전히 채워져 있습니다 (fetchMode = [tasks : "eager"]로 작성한 것처럼) ...

누군가 내게 우승 힌트를 줄 수 있다면 정말 좋을 것입니다.

시간 내 주셔서 감사합니다.

행복을 빌며,

답변

0

마르코 쿼리의이 종류는 지원되지 않습니다 - 당신은 HQL 또는 일반의 기준 쿼리를 사용해야 할 것입니다. 그러나 양방향 관계가 있기 때문에이 특별한 방법은 쉽습니다. 이와 Tasks의 컬렉션에 대한 HumanResource 모든 인스턴스를 얻을 수 있습니다 :

그것은 당신이 유일한 경우에 목록을 응축 할 필요가 있으므로 같은 HumanResource 인스턴스가 여러 번 나타날 수 있습니다 때문에 Set 할 필요가
def resources = service.getTasks().collect { it.humanResources }.flatten() as Set 

.

+0

안녕하세요 버트, 정말 고마워요! 그러나 나는 계속적인 질문을 가지고있다. 당신의 솔루션을 사용하면 "HumanResource"모델이 완벽하게 채워지고 많은 불필요한 최대 절전 모드 선택이 수행됩니다. 솔루션에서이를 "제외"할 수 있습니까? 아니면 솔루션에서 "수집 할 대상"을 위임 할 수 있습니까? 나는 ** def resources = service.getTasks()를 시도했다. {humanResources.id; humanResources.firstName; humanResources.lastName} .flatten()을 Set **로 설정했지만이 경우 (5 개 리소스의 경우) 15 개의 결과가 정렬되지 않고 서로 관련이 없습니다 .-(나에게 힌트를 줄 수 있습니까? – grailsInvas0r

관련 문제