【问题标题】:Grails joining tablesGrails 连接表
【发布时间】:2017-11-30 02:32:00
【问题描述】:

我有两节课。为简单起见,我删除了不相关的数据。我需要将订单加入调查,反之亦然。 我知道我可以跑 select * from Order o right join order.survey s where s.id='x' 然而,这不是我想做的。我想用左外连接将 Order 加入到调查中,但调查在类中没有 Order 类的实例。订单包含一个调查类的实例,这就是为什么从订单类连接表格更容易的原因。我在 Grails 中使用 SQL 完成了它,但是我想知道如何使用 hql 完成它。 sql代码如下。

Select survey.*,ao.* from survey sr left outer join order ao on ao.survey_id=sr.id

型号如下

class Order{
 Survey survey
}

class   Survey {
}

【问题讨论】:

    标签: grails join groovy left-join hql


    【解决方案1】:

    试试这个:

    SELECT sr, (SELECT ao FROM namespace.Order ao WHERE ao.survey = sr.id)
    FROM namespace.Survey sr 
    

    您列出所有调查对象,如果存在关联的订单,您将通过子查询获得

    注意:我已经添加了命名空间术语,你会改变你的命名空间类

    【讨论】:

    • 在这种情况下,您正在从 ao 中选择一些数据。就我而言,我需要按 ORDER 中的一些值进行过滤,这就是为什么我需要连接表并使用它。
    【解决方案2】:

    为了在 HQL 中进行连接,您必须扩展您的域模型。给你的Survey 类添加一个反向引用:

    class Survey {
      static belongsTo = [ order:Order ]
    }
    

    所以,您可以从中解析 Order 实例:

    Survey s = Survey.get someId
    s.order
    

    def orders = Survey.executeQuery 'select order from Survey where order.id = 111'
    

    【讨论】:

    • 根据您的建议,我必须将订单添加到调查。但是,它对我不起作用。调查中不应有订单 ID。如果我添加属于,那么它将在数据库中的调查中添加 orderid 列。但是,如果您建议使用“hasone”来订购,那可能会更好。但是,在这种情况下,我必须在 Survey notNullable 中创建订单实例,它也对我不起作用。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多