Проблема с дубликатами, использующими функцию Grails withCriteria с отношением «многие ко многим» - PullRequest
4 голосов
/ 24 августа 2011

У меня есть 2 таблицы, Вопрос и Ответ, с отношением «многие ко многим» (т.е. Вопросы могут иметь несколько Ответов, а Ответы могут быть повторно использованы несколькими Вопросами). Для нормализации у меня есть таблица перекрестных ссылок между ними с именем Question_Answer, которая имеет отношение «многие к одному» с обеими таблицами. Это их определения классов:

class Question {
    int id
    int text

    static hasMany = [questionAnswers : QuestionAnswer]
}

class Answer {
    int id
    int text

    static hasMany = [questionAnswers : QuestionAnswer]
}

class QuestionAnswer {
    int id
    Question question
    Answer answer
}

Я пытаюсь получить список ответов на основе определенных критериев. Вот мой запрос критериев (используя функцию Grails 'withCriteria):

def listing = Answer.withCriteria {
    cache false
    order "id", "asc"

    eq("id", myAnswerID)

    questionAnswers {
        question {
            isNotNull("text")
        }
    }
}

Вот пример проблемы, с которой я столкнулся:

У меня есть ответ, который соответствует 3 различным вопросам. То, что я хочу в «листинге», это 1 Answer объект, с его списком questionAnswers, заполненным 3 соответствующими QuestionAnswer объектами. Вместо этого я получаю 3 идентичных объекта Answer, каждый из которых заполнен списками questionAnswers.

Есть ли простой способ добиться того, чего я хочу? Я надеюсь, что мне просто не хватает чего-то маленького.

Любая помощь / предложения приветствуются.

Спасибо, B.J.

1 Ответ

7 голосов
/ 25 августа 2011

Попробуйте добавить это в свой запрос, чтобы сообщить Критериям, что нужно возвращать только отдельные объекты ответа:

resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...