Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate criteria / 8 сообщений из 8, страница 1 из 1
03.04.2017, 13:31
    #39431989
Kail
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Имеется SQL запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT 
      id_Ad
     ,number
     ,UWGLotStatuses.id_LotStatus
  FROM 
	[dbo].[Lots] Lots
		LEFT JOIN [dbo].UWGLotStatuses
			JOIN [dbo].UnionWorkGroups 
			ON (UnionWorkGroups.id = UWGLotStatuses.id_UnionWorkGroup AND UnionWorkGroups.id in (4))
		ON UWGLotStatuses.id_Lot = Lots.id
WHERE
		id_Ad = 2494



Как данный запрос описать с помощью criteria, а в частности интересует следующий кусок JOIN [dbo].UnionWorkGroups ON (UnionWorkGroups.id = UWGLotStatuses.id_UnionWorkGroup AND UnionWorkGroups.id in (4))
...
Рейтинг: 0 / 0
03.04.2017, 13:54
    #39432008
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
В приведённом примере очевидно что JOIN-ы это ассоциации сущностей. Переводить их в Criteria особого смысла нет, они должны быть частью маппинга. В Criteria API есть метод setFetchMode, который указывает как именно ассоциацию загружать именно в этом запросе.
...
Рейтинг: 0 / 0
03.04.2017, 14:12
    #39432023
Kail
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Посмотрел в сторону setFetchMode, но не нашёл способа как в JOIN указать ON (UnionWorkGroups.id = UWGLotStatuses.id_UnionWorkGroup AND UnionWorkGroups.id in (4)).

JOIN по одному условию типа ON UnionWorkGroups.id = UWGLotStatuses.id_UnionWorkGroup, меня не интересует это делается просто, но вот как сделать по множеству условий?

Причём перенос условия UnionWorkGroups.id in (4) в предложение WHERE тоже не устраивает, результаты выборки будут отличаться.

Возможно ли в criteria выполнить данный запрос?
...
Рейтинг: 0 / 0
03.04.2017, 14:30
    #39432044
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Kail,

http://stackoverflow.com/a/11092067

KailПричём перенос условия UnionWorkGroups.id in (4) в предложение WHERE тоже не устраивает, результаты выборки будут отличаться.
Это как так???
...
Рейтинг: 0 / 0
03.04.2017, 14:31
    #39432048
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Kail,

Зачем хотеть странного, если у вас уже есть SQL-запрос?!
<:o)
...
Рейтинг: 0 / 0
03.04.2017, 14:45
    #39432066
Kail
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Blazkowicz,

Если вы заметили одно из соединений использует LEFT JOIN, так вот если перенести условие UnionWorkGroups.id in (4) в WHERE, то результирующий набор будет содержать только записи для которых UnionWorkGroups.id равняется 4-м, а необходимы в том числе результаты для которых таблица UWGLotStatuses будет не определена т.е. NULL.

mad_nazgul ,

Приложение построено на использовании criteria, если использовать native SQL или HQL много переделывать необходимо, чего не хочется.
...
Рейтинг: 0 / 0
03.04.2017, 15:07
    #39432090
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Kailа необходимы в том числе результаты для которых таблица UWGLotStatuses будет не определена т.е. NULL
Это уже будет не ORM.
...
Рейтинг: 0 / 0
04.04.2017, 06:06
    #39432462
Kail
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate criteria
Blazkowicz,авторЭто уже будет не ORM.
не совсем согласен, ведь у criteria API для чего-то существует JoinType.LEFT_OUTER_JOIN.

Ваша подсказка немного помогла, но не совсем, на выходе получился следующий код SQL(неполный):

from dbo.Lots this_
left outer join dbo.UWGLotStatuses uwglotstat1_ on this_.ID=uwglotstat1_.id_Lot
inner join dbo.UnionWorkGroups unionworkg2_ on uwglotstat1_.id_UnionWorkGroup=unionworkg2_.ID and ( unionworkg2_.ID=4 )

Осталось добиться что бы выглядело следующим образом:

from dbo.Lots this_
left outer join dbo.UWGLotStatuses uwglotstat1_
inner join dbo.UnionWorkGroups unionworkg2_ on (uwglotstat1_.id_UnionWorkGroup=unionworkg2_.ID and unionworkg2_.ID=4 )
on this_.ID=uwglotstat1_.id_Lot

Может у кого-нибудь есть мысли по этому поводу?
Заранее спасибо.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate criteria / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]