Grails Many-To-Many - Проблемы динамического поиска - PullRequest
0 голосов
/ 31 июля 2011

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

У меня есть два класса DomainClass HumanResource и Задача с отношением "многие ко многим".

Model-Определения:

Задание :

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 с отображением = {}, но я также думаю, что это не решение, это не помогло, и я думаю, что уже есть индекс в поле id.

Итак, то, что я делал, а что не работает, - это теперь найду все человеческие ресурсы для выполнения заданий! И задачи поступают из Служб, и они уже выбираются в модели Службы с помощью «static 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

}

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

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

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

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

Marco

1 Ответ

0 голосов
/ 31 июля 2011

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

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

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

...