2015-02-16 4 views
0

проблемы с hasMany и слева присоединяется:Grails hasMany покинул присоединиться

класса А {статического hasMany = [Ь: B]} класса B {ключ String, значение Строки} Это объединение создает таблицу отображения AB.

Что я хочу сделать, это отсортировать все объекты A по значению в B, где key = 'someKey'. Если я использую HQL внутреннее соединение

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

Я получаю подмножество, которое 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 

Как я могу это сделать? Я чувствую, что упускаю что-то очень очевидное.

ответ

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) 
Смежные вопросы