当前位置: 首页 > 面试题库 >

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

丁钟展
2023-03-14
问题内容

我有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


问题答案:

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

resultTransformer org.hibernate.Criteria.DISTINCT_ROOT_ENTITY


 类似资料:
  • 我正在努力理解如何处理与JOOQ的一对多和多对多关系的Pojo。 我存储玩家创建的位置(一对多关系)。一个位置可以容纳多个可能访问它的其他玩家(多对多)。数据库布局可归结为以下内容: 在我的java应用程序中,所有这些信息都存储在一个pojo中。请注意,玩家和受邀玩家列表可以从应用程序中更新,也需要在数据库中更新: 我可以使用JOOQ的pojo映射将这三个记录映射到单个pojo吗?我可以使用这个p

  • 我在DAO界面中使用PostgreSQL查询映射通过JDBi3检索的数据时遇到了问题。在我的Dropwzo应用程序中,我有Book DTO类,它与作者和类别DTO类有多对多关系,并且在将查询的行映射到BookDTO类时遇到了问题。以下是DTO类的代码片段: …由于我使用JDBi3 DAO接口来执行CRUD操作,这就是我查询数据库中所有书籍的方法的样子: 。这是类的方法,如下所示: 我遇到的问题是,

  • 问题内容: 程序包A有一个桌面Y和一个MonitorZ。程序包B有一个桌面Y和 两个 MonitorZ。我想在由实体设计器创建的数据库中表示该关系。 和之间(具有台式机,显示器,笔记本电脑等)之间存在多对多关系。每个季度,我们都会更新包裹,客户下订单。他们选择一个包,下订单时,该包会将其数据(类型,品牌,型号等)转储到新创建的中。 问题出在实体设计器为关系创建联结表的方式上。联结表具有两列,分别对

  • 问题内容: 有三个表:,并且,医院能提供的医疗服务和语言服务。因此,存在两个多对多关系。 简单ERD 现在,我想使用和搜索医院数据。 DaoImpl: 而且,如果我想从三个表中按邮政编码,医疗类型和语言进行搜索,那么如何编写一个jsql。 警告: 错误:org.hibernate.hql.internal.ast.ErrorCounter- 预期加入的路径!希望加入的路径!在org.hiberna

  • 我还想知道如何定义每个模型上的关系--你是否需要或者是否可以只在用户上定义关系?

  • 问题内容: 我正在尝试创建一个消息传递系统,其中消息的发送者和接收者可以是通用实体。对于发件人来说,这似乎很好,在该发件人中只有要引用的对象(GenericForeignKey),但我不知道如何为收件人进行处理(GenericManyToManyKey ??)。 下面是一个简化的示例。PersonClient和CompanyClient从Client继承属性,但具有其自己的特定详细信息。最后一行是