Запрос критериев jpa не выполняется после MapJoin - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть следующие @Entities

@Entity
public class Configuration{
   @OneToMany
   protected Map<String, Component> components;
}

и

@Entity
public class Component{
    protected String displayName;
}      

Я не понимаю, почему это работает, возвращая все конфигурации

  CriteriaBuilder cb = em.getCriteriaBuilder();
  CriteriaQuery<Configuration> cq = cb.createQuery(Configuration.class);
  Root<Configuration> pc = cq.from(Configuration.class);
  cq.select(pc);

Ноесли я делаю MapJoin, даже без установки каких-либо условий, он ничего не возвращает

  CriteriaBuilder cb = em.getCriteriaBuilder();
  CriteriaQuery<Configuration> cq = cb.createQuery(Configuration.class);
  Root<Configuration> pc = cq.from(Configuration.class);
  MapJoin<Configuration, String, Component> mapJoin = pc.join(Configuration_.components); 
 cq.select(pc);

Что мне не хватает?Я в растерянности, я прошел учебники, но не нашел ответы, которые мне нужны.Любая помощь высоко ценится.

1 Ответ

2 голосов
/ 05 февраля 2012

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

Первый запрос эквивалентен

select configuration.* from configuration

А второй эквивалентен

select configuration.* from configuration
inner join component on component.id = configuration.id
...