Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Join с Criteria API / 14 сообщений из 14, страница 1 из 1
20.09.2016, 11:19
    #39311778
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Есть SQL запрос:

Код: plsql
1.
2.
3.
4.
5.
select oi.nameshort from creditrequest c
join users u on u.id=c.user_id
join peoplemanagers pm on pm.people_id=u.people_id
join organizationinfo oi on oi.organization_id=pm.organization_id
where oi.nameshort like 'ИП%'



Надо написать этот же запрос на Criteria API. Пытаюсь так:
Код: java
1.
2.
3.
4.
5.
Join<OrganizationEntity, OrganizationInfoEntity> orgInfoJoin = root.join(CreditRequestEntity_.userId)
                    .join(UsersEntity_.peopleId)
                    .join(PeopleManagerEntity_.peopleId)
                    .join(PeopleManagerEntity_.organizationId)
                    .join(OrganizationInfoEntity_.organizationId);


На строчке .join(PeopleManagerEntity_.peopleId) выдает ошибку, что не может найти соответствующий Join метод. Насколько я понял учебник, то я могу использовать Join только когда у меня есть прямая ссылка из таблицы на таблицу. Но её нет, начиная с этого места. Как следует поступать
...
Рейтинг: 0 / 0
20.09.2016, 11:46
    #39311817
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
ЩичеЕсть SQL запрос:
Про inner join в курсе?

Код: plsql
1.
2.
3.
4.
5.
6.
select oi.nameshort 
from creditrequest c, users u, peoplemanagers pm, organizationinfo oi
where oi.nameshort like 'ИП%'
and u.id=c.user_id
and pm.people_id=u.people_id
and oi.organization_id=pm.organization_id



People Id это конечно "пять". Английский надо бы подтянуть.
...
Рейтинг: 0 / 0
20.09.2016, 12:07
    #39311842
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Blazkowicz, боюсь, что ваш способ написания SQL не пригодится. Мне нужно именно Criteria API. Насчет английского - это не я проектировал БД.
...
Рейтинг: 0 / 0
20.09.2016, 12:12
    #39311846
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
ЩичеBlazkowicz, боюсь, что ваш способ написания SQL не пригодится. Мне нужно именно Criteria API.
А вы не бойтесь. Вы подумайте нет ли, случайно, в Criteria API метода where?
...
Рейтинг: 0 / 0
20.09.2016, 13:20
    #39311927
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
ЩичеBlazkowicz, боюсь, что ваш способ написания SQL не пригодится. Мне нужно именно Criteria API. Насчет английского - это не я проектировал БД.

Ну... А может все таки без CriteriaAPI?
Просто написать запрос и ч/з CriteriaAPI это еще то приключение.
Мне, например, проще написать native SQL запрос, чем правиться с CriteriaAPI.
...
Рейтинг: 0 / 0
20.09.2016, 13:43
    #39311943
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
mad_nazgul, не своей волей, но токмо волей пославшей мя жены... У нас архитектор возлюбил JPA, а тимлид решил, что HQL не выражает всей святости объектного подхода. Потому навязал нам именно CriteriaAPI. Нас не спрашивают.
...
Рейтинг: 0 / 0
20.09.2016, 13:44
    #39311944
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Blazkowicz, теперь понятнее. Попробую.
...
Рейтинг: 0 / 0
20.09.2016, 20:55
    #39312275
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
mad_nazgulЩичеBlazkowicz, боюсь, что ваш способ написания SQL не пригодится. Мне нужно именно Criteria API. Насчет английского - это не я проектировал БД.

Ну... А может все таки без CriteriaAPI?
Просто написать запрос и ч/з CriteriaAPI это еще то приключение.
Мне, например, проще написать native SQL запрос, чем правиться с CriteriaAPI.

это клёво до тех пор пока не надо какие нибудь хитрые комбинации сорта по куче полей и пагинации.

я н-р пользуюсь во всю жпа спецификациями (те же критерии в общем то). это конечно, временами тот еще гемор, выливающийся в жуткие монструозные конструкции. но, со временем привыкаешь вполне. ))
...
Рейтинг: 0 / 0
20.09.2016, 22:38
    #39312315
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Blazkowicz

People Id это конечно "пять". Английский надо бы подтянуть.

id народа)
...
Рейтинг: 0 / 0
21.09.2016, 06:35
    #39312350
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Щичеmad_nazgul, не своей волей, но токмо волей пославшей мя жены... У нас архитектор возлюбил JPA, а тимлид решил, что HQL не выражает всей святости объектного подхода. Потому навязал нам именно CriteriaAPI. Нас не спрашивают.

Так не показывайте архитектору код!
А сами потихоньку вызывайте HQL или вообще кошерный SQL там где нужно!
За не выполненную задачу не архитектора пинать будут, а вас.

А если поймает, скажите, что пока так, а потом отрефакторите. ;-)
...
Рейтинг: 0 / 0
21.09.2016, 08:26
    #39312378
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
natanabrahamjrэто клёво до тех пор пока не надо какие нибудь хитрые комбинации сорта по куче полей и пагинации.

я н-р пользуюсь во всю жпа спецификациями (те же критерии в общем то). это конечно, временами тот еще гемор, выливающийся в жуткие монструозные конструкции. но, со временем привыкаешь вполне. ))

Постраничная выборка критериям параллельна. И без них она реализуется остальными способами формирования запросов. А вот "хитрые комбинации" единственный сценарий где от Criteria API есть смысл. Поэтому инструменты лучше применять к месту, а крайности никогда до добра не доводили.
...
Рейтинг: 0 / 0
21.09.2016, 10:02
    #39312470
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
mad_nazgul, обязательно поймает. Тимлид у нас очень добросовестный. Соглашусь с Блацковицем, что технофанатизм в нашем деле только раздражает. Но факт, фанатиков у нас моря. Иногда они становятся тимлидами и архитекторами.
...
Рейтинг: 0 / 0
21.09.2016, 10:28
    #39312500
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Щичеmad_nazgul, обязательно поймает. Тимлид у нас очень добросовестный. Соглашусь с Блацковицем, что технофанатизм в нашем деле только раздражает. Но факт, фанатиков у нас моря. Иногда они становятся тимлидами и архитекторами.

Ну когда я "бодался" с Criteria API, для JOIN выборок использовал fetch.

Но можно сделать, например, так

Код: java
1.
2.
3.
4.
5.
criteriaBuilder.equals(
root.get(CreditRequestEntity_.userId)
.get(UsersEntity_.peopleId)
.get(PeopleManagerEntity_.organizationId)
.get(OrganizationInfoEntity_.organizationId),  organizationId);



Но только в соответствующих Entity должны быть аннотации @MantToOne
Т.е.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@ManyToOne
UsersEntity userId
...
@ManyToOne
PeopleManagerEntity peopleId
...
@ManyToOne
OrganizationInfoEntity organizationId
...
Рейтинг: 0 / 0
21.09.2016, 10:30
    #39312502
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join с Criteria API
Щиче
Код: java
1.
2.
3.
4.
5.
Join<OrganizationEntity, OrganizationInfoEntity> orgInfoJoin = root.join(CreditRequestEntity_.userId)
                    .join(UsersEntity_.peopleId)
                    .join(PeopleManagerEntity_.peopleId)
                    .join(PeopleManagerEntity_.organizationId)
                    .join(OrganizationInfoEntity_.organizationId);


Два раза?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Join с Criteria API / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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