Grails连接表

时间:2017-06-27 06:22:24

标签: grails join groovy left-join hql

我有两节课。为简单起见,我删除了不相关的数据。我需要加入Order to Survey,反之亦然。 我知道我可以跑 select * from Order o right join order.survey s where s.id='x' 但是,这不是我想做的。我想通过左外连接加入Order to Survey,但调查在类中没有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 {
}

2 个答案:

答案 0 :(得分:0)

试试这个:

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

列出所有Survey对象,如果存在与子查询相关的订单

注意:我添加了命名空间术语,您将使用命名空间类进行更改

答案 1 :(得分:0)

为了在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'