hibernate - grails has许多离开加入

标签 hibernate grails

hasMany和left联接存在问题:

A类{静态hasMany = [b:B]}
B类{字符串键,字符串值}
该关联创建映射表AB。

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

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

我得到具有b.value ='someKey'的A的子集。大。因此,我认为我所要做的就是将内部联接更改为左联接并获得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中的另一个左联接。这不是我想要的,我真正想要的是使用SQL来维护AB-> B的内部联接:
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)

关于hibernate - grails has许多离开加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28545417/

相关文章:

mysql - 如何从 hibernate+spring 应用程序将 csv 文件导入 mysql?

java - 如何在 JpaRepository 上运行自定义更新查询?(TransactionRequiredException)

java - Hibernate - 通过更新父对象创建子对象,但需要生成子对象的 key

url - 防止 url 上的错误请求 "ids"的 Grails 方法

带参数的 Grails 转发和/或重定向

hibernate - Grails 级联删除

java - Hibernate 忽略鉴别器列 - 始终使用 'dtype'

spring - 当 getHibernateTemplate() 发生提交时

grails - 如何使用条件检索域对象

multithreading - Grails promise 未调用回调