【问题标题】:How do I make a Grails criteria execute as a left join?如何使 Grails 条件作为左连接执行?
【发布时间】:2023-04-08 21:08:02
【问题描述】:

我有一个 Grails 标准,它具有可为空的关联子类。我需要得到所有结果,即使是那些有 null 孩子的结果,但标准是通过 INNER JOIN 执行的。如何使用 LEFT JOIN 执行它?

Grails 版本是 1.3.7(最新),正在通过 createCriteria().list 执行查询

【问题讨论】:

  • 什么版本的 Grails?另外,你是如何执行查询的?使用动态查找器?创建标准?执行查询?
  • Grails 版本是 1.3.7(最新),正在通过 createCriteria().list 执行查询
  • 我已合并您的帐户,您现在可以重新解决您的问题。

标签: grails criteria


【解决方案1】:

由于问题很老,并且对此进行了很多改进。 Follow 将帮助像我这样搜索的人。即使在带有集合的条件查询中使用复杂的 and{} 和 or{} 块,Following 也能工作。在例如。 specialities 是一个集合。

    List users = User.createCriteria().list(){
                    createAlias('specialities', 'sp', CriteriaSpecification.LEFT_JOIN)

    ilike("sp.name","%"+trimPhrase+"%")
}

【讨论】:

    【解决方案2】:

    尝试使用 hql 语句。对于左连接,请参阅:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

    hql 语句可以如下执行:DomainClass.executeQuery("select from ....")

    【讨论】:

    • 由于其他业务需求,我确实需要为此使用标准。我曾尝试使用createAlias("childClass", "child", CriteriaSpecification.LEFT_JOIN),但我想我遇到了this Grails bug。仍然在这个问题上拉我的头发。
    • 我建议使用 hql,因为您可以更好地控制连接机制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多