我有两节课。为简单起见,我删除了不相关的数据。我需要加入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 {
}
答案 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'