grails hasMany离开加入

时间:2015-02-16 15:59:14

标签: hibernate grails

hasMany和left join的问题:

A类{static hasMany = [b:B]} B类{String key,String value} 此关联创建映射表AB。

我想要做的是按B中的值对所有A对象进行排序,其中key ='someKey'。如果我使用HQL内连接

from A a inner join a.b b on b.key = 'someKey' order by b.value

我得到的A的子集有b.value ='someKey'。大。所以,我认为我所要做的就是将内部连接更改为左连接并获取A的完整列表,其中一些使用b.value ='someKey',其余部分使用b.value = null:

from A a left join a.b b on b.key = 'someKey' order by b.value

但是,当我使用左连接时,SQL显示A-> AB之间的左连接,以及AB-> B的另一个左连接。这不是我想要的,我真正想要的是保持AB-> B的内连接,使用SQL,如:

from A a left join AB ab
    inner join B b on ab.b_id = b.id and b.value = 'someKey'
on a.id = ab.a_id

我该怎么做?我觉得我错过了很明显的东西。

1 个答案:

答案 0 :(得分:0)

这是我直接在mysql下做同样的事情,但你应该能够根据你的需要找出相同的东西..

mysql> select a.applications_testserver_id,b.name from applications_test_app_servers a LEFT JOIN applications b ON a.applications_testserver_id=b.id where b.name IS NULL;
+----------------------------+------+
| applications_testserver_id | name |
+----------------------------+------+
|                        145 | NULL |
+----------------------------+------+
1 row in set (0.00 sec)

mysql> delete applications_test_app_servers from applications_test_app_servers LEFT JOIN applications ON applications_test_app_servers.applications_testserver_id=applications.id where applications.name IS NULL;
Query OK, 1 row affected (0.02 sec)