Как выполнить внешнее объединение в Hsql - PullRequest
1 голос
/ 08 декабря 2011

У меня есть запрос, подобный этому

SELECT * from table1 t1,table2 t2, OUTER table3 t3

Это работает в базе данных Informix, но когда я использую его как Hsql, он не может найти только это ключевое слово "OUTER" ... Как сделать внешнийприсоединиться к Hibernate?

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

HSQLDB поддерживает стандартный синтаксис SQL, который отличается от вашего синтаксического запроса Informix.Некоторые примеры этого синтаксиса:

SELECT * from table1 t1 NATURAL JOIN table2 t2 NATURAL LEFT OUTER JOIN table3 t3

SELECT * from table1 t1 JOIN table2 t2 ON (T1.X = T2.Y) LEFT OUTER JOIN table3 t3 ON (T2.Z = T3.X)

Вы должны адаптировать свой запрос к стандартному синтаксису.

Запрос, о котором вы сообщили в комментариях, переводится в стандартный SQL следующим образом:

SELECT distinct sd.student_id, ss.sports_id, sf.fee_desc FROM STUDENTDETAILS sd
JOIN STUDENTSPORTS ss ON ss.sports_id = sd.sports_id LEFT OUTER JOIN STUDENTFEES sf 
ON ??? 

Обратите внимание, что вам нужно условие для вопросительных знаков.Например, идентификатор в STUDENTSFEES, который должен быть равен идентификатору в STUDENTSSPORTS.sf.some_id = ss.some_id

1 голос
/ 08 декабря 2011

при условии, что ваши сущности и файлы сопоставления настроены правильно, это было бы довольно просто "оставленное внешнее соединение entity.field as alias"

с веб-сайта HQL

from Cat as cat
inner join cat.mate as mate
left outer join cat.kittens as kitten

Веб-сайт HQL

В вашем случае для таблиц в качестве сущностей это будет что-то вроде table1 как внутреннего соединения tab1 tab.table2column в качестве tab2 левого столбца внешнего соединения tab.table3 в качестве tab3

0 голосов
/ 08 декабря 2011

HQL и SQL - два разных языка. SQL использует таблицы и столбцы, а HQL использует объекты, поля и связи между объектами.

Прочтите справочную документацию по Hibernate .

...