Запрос JPA 2, выдающий странное поведение в предложении OR - PullRequest
1 голос
/ 18 февраля 2011

У меня есть запрос JPA 2, который сводит меня с ума.SurveyQuestion может иметь Организацию.Вот соответствие в SurveyQuestion

@ManyToOne( optional=true )
@JoinColumn( name="organization_key" )
private Organization organization;

Организация имеет поле с именем key.Я создаю TypedNamedQuery со следующим jpql

SELECT q from SurveyQuestion q 
    where q.organization IS NULL 
    or q.organization.key = :organizationKey

с этим запросом, я получаю только те вопросы, которые имеют данный ключ.Если я удаляю q.organization.key =: organizationKey из запроса, то я получаю все те, у которых нет организации, но я не могу заставить ее вернуть комбинацию тех, которые не имеют организации или имеютуказанная организация.

JPA2 с поставщиком EclipseLink.

1 Ответ

3 голосов
/ 18 февраля 2011

Это стандарт JPA.

q.organization.key 

разрешает внутреннее соединение в q.organization, а не левое соединение!

Вы должны сделать это:

SELECT q 
  from SurveyQuestion q 
  left join q.organization o
 where o is null OR o.key = :organizationKey
...