一尘不染

使用具有多对多关系的Grails的withCriteria函数进行重复的问题

hibernate

我有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填充了它们的列表。

有没有一种简单的方法可以实现我想要的?我希望我只是想念一些小东西。

任何帮助/建议,我们将不胜感激。

谢谢,BJ


阅读 262

收藏
2020-06-20

共1个答案

一尘不染

尝试将其添加到查询中,以告诉条件仅返回不同的Answer对象:

resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY
2020-06-20