Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: неверное интерпретирование запроса / 6 сообщений из 6, страница 1 из 1
07.08.2012, 17:47:23
    #37907732
glebrant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: неверное интерпретирование запроса
Всем привет!

Имеется JPA сущность Event:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Entity
@Table(name = "EVENT")
public class Event {

    //...
    
    @ManyToOne
    @JoinColumn(name = "EMLE_ID", nullable = true)
    private Employee employee;

    @ManyToOne
    @JoinColumn(name = "PNSM_ID", nullable = true)
    private ProtectionSystem protectionSystem;
    
    //...



В таблице есть одна запись, в которой связь event.protectionSystem указана, а event.employee нет (employee = null).

Написал на jpql следующий запрос:

Код: sql
1.
select event from Event event where event.employee.department.id = :departmentId or event.protectionSystem.department.id = :departmentId



По логике, запрос должен вернуть ту единственную запись, т.к. условие event.protectionSystem.department.id = :departmentId соблюдается, однако, этого не происходит.

Обнаружил, что hibernate 4 генерирует вот что:

Код: sql
1.
select event0_.EVNT_ID as EVNT1_75_, event0_.EVNT_CHANGE_DATE as EVNT2_75_, event0_.EVNT_CREATION_DATE as EVNT3_75_, event0_.EVNT_DATE as EVNT4_75_, event0_.DEVE_ID as DEVE5_75_, event0_.EMLE_ID as EMLE6_75_, event0_.ETTE_ID as ETTE7_75_, event0_.PNSM_ID as PNSM8_75_ from EVENT event0_, EMPLOYEE employee1_, PROTECTION_SYSTEM protection2_ where event0_.EMLE_ID=employee1_.EMLE_ID and event0_.PNSM_ID=protection2_.PNSM_ID and (employee1_.DERT_ID=? or protection2_.DERT_ID=?)



Понятно, что запрос сгенерирован не верно, но не понятно почему. Есть идеи?
...
Рейтинг: 0 / 0
07.08.2012, 17:58:37
    #37907745
glebrant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: неверное интерпретирование запроса
Поправка:

Если в event.employee задать связь (value != null) то всё работает, а так получается, что вместо условия OR, у меня выходит AND. Таким образом, оба поля (protectionSystem и employee) должны быть строго != null.

Доп. условия вроде event.employee is not null не помогают.
...
Рейтинг: 0 / 0
07.08.2012, 18:09:19
    #37907765
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: неверное интерпретирование запроса
А так?
Код: sql
1.
select event from Event event where event.employee.department.id = :departmentId or (event.employee is null and event.protectionSystem.department.id = :departmentId)
...
Рейтинг: 0 / 0
07.08.2012, 18:13:03
    #37907772
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: неверное интерпретирование запроса
забыл ник, а толку? это не изменится же:
Код: sql
1.
where event0_.EMLE_ID=employee1_.EMLE_ID and event0_.PNSM_ID=protection2_.PNSM_ID


Видимо должен быть способ написать запрос так чтобы появились левые соединения вместо where.
...
Рейтинг: 0 / 0
08.08.2012, 10:26:58
    #37908246
glebrant
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: неверное интерпретирование запроса
забыл ник,

тоже не поможет, как только не комбинировал уже..
...
Рейтинг: 0 / 0
09.08.2012, 16:41:13
    #37910983
rdm
rdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: неверное интерпретирование запроса
glebrant,

авторselect event from Event event where event.employee.department.id = :departmentId1 or event.protectionSystem.department.id = :departmentId2
Не побывали дать разные имена переменным?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: неверное интерпретирование запроса / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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