我有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函数):
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填充了它们的列表。
Answer
questionAnswers
QuestionAnswer
有没有一种简单的方法可以实现我想要的?我希望我只是想念一些小东西。
任何帮助/建议,我们将不胜感激。
谢谢,BJ
尝试将其添加到查询中,以告诉条件仅返回不同的Answer对象:
resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY