Фильтры гибернации не работают на внутренних соединениях? - PullRequest
2 голосов
/ 21 марта 2011

У меня есть класс Employee, для которого определен фильтр. Фильтр фильтрует всех сотрудников с зарплатой менее 1000.

У меня также есть класс EmployeePhoneNumber. У сотрудника может быть много EmployeePhoneNumber с, но каждый EmployeePhoneNumber подключен к одному сотруднику. (Многие к одному)

Когда я включаю фильтр и запрос для сотрудников:

SELECT employee from Employee employee.

Фильтр работает нормально, и возвращаются только соответствующие сотрудники с зарплатой более 1000.

Когда я запрашиваю внутреннее объединение между сотрудником и сотрудниками:

SELECT employeePhoneNumber.id, employee.id from EmployeePhoneNumber employeePhoneNumber inner join employeePhoneNumber.employee employee

Фильтр не работает, и я получаю телефонные номера от сотрудников с зарплатой менее 1000.

Как я могу решить эту проблему (все еще используя фильтры и объединения)? Я знаю, что могу сделать это, добавив подзапрос к своему запросу (проверка того, что сотрудник находится в списке сотрудников, добавит необходимый фильтр), но это менее эффективно.

1 Ответ

0 голосов
/ 24 февраля 2012

Решением было бы создать подобный фильтр в employeePhoneNumber, например:

<filter 
    name="salaryFilter" 
    condition="((select e.salary from Employee e where e.id = employeeId) < salaryParameter)" 
/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...