grails还有很多人加入



hasMany和left联接的问题:

class A{static hasMany=[b:b]}类B{字符串键,字符串值}这个关联创建了一个映射表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

我该怎么做?我觉得我错过了一些显而易见的东西。

这是我直接在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)

最新更新