powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: неверное интерпретирование запроса
6 сообщений из 6, страница 1 из 1
Hibernate: неверное интерпретирование запроса
    #37907732
glebrant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Имеется 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
Hibernate: неверное интерпретирование запроса
    #37907745
glebrant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка:

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

Доп. условия вроде event.employee is not null не помогают.
...
Рейтинг: 0 / 0
Hibernate: неверное интерпретирование запроса
    #37907765
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так?
Код: 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
Hibernate: неверное интерпретирование запроса
    #37907772
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, а толку? это не изменится же:
Код: sql
1.
where event0_.EMLE_ID=employee1_.EMLE_ID and event0_.PNSM_ID=protection2_.PNSM_ID


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

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

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


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