2011-07-31 2 views
0

Надеюсь, вы можете помочь мне, ребята. Google, к сожалению, не помогает мне, и мой поиск здесь StackOverflow не так :-(Grails Many-to-Many - проблемы динамического искателя

У меня есть два 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-поле.

Итак, что я сделал и не работает, теперь нужно найти все человеческие ресурсы для данных задач! И задачи поступают из Сервисов, и они уже получены в модели обслуживания с помощью «static fetchMode = [tasks:« hager »]»!

Контроллер-код:

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

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

} 

Я всегда получаю ошибку "org.springframework.dao.InvalidDataAccessResourceUsageException" с SQL-GrammarException. Но я действительно не знаю, почему. Объекты «service.getTasks()» полностью заполнены (как я писал с помощью fetchMode = [tasks: «eager»]) ...

Было бы здорово, если бы кто-нибудь мог дать мне выигрышный намек.

Большое спасибо за ваше время.

С наилучшими пожеланиями,

Marco

ответ

0

Этот вид запроса не поддерживается - Вы должны были бы использовать HQL или запрос критериев в целом. Но этот конкретный легко, так как у вас двунаправленные отношения. Вы можете получить все HumanResource экземпляров для коллекции Tasks с этим:

def resources = service.getTasks().collect { it.humanResources }.flatten() as Set 

Это должно быть Set так же HumanResource экземпляра может появляться несколько раз, так что вам нужно уплотнить список в уникальные экземпляры.

+0

Привет, Берт, спасибо, что работает! Но у меня есть вопрос продолжения. Если я использую ваше решение, модель «HumanResource» заполняется полностью, и будет выполнено множество ненужных спящих. Как я могу «исключить» это с помощью вашего решения или как я могу делегировать «что собирать» с вашим решением? Я попробовал ** def resources = service.getTasks(). Collect {humanResources.id; humanResources.firstName; humanResources.lastName} .flatten() as Set **, но с этим я получаю (в случае 5 ресурсов) 15 результатов неупорядоченных и не связанных друг с другом :-(Можете ли вы дать мне подсказку? Еще раз спасибо! – grailsInvas0r