MapJoin后jpa条件查询失败

时间:2012-02-05 17:06:52

标签: jpa jpa-2.0 criteria criteria-api

我有以下@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 个答案:

答案 0 :(得分:2)

因为默认情况下连接类型是内部的,这意味着对于要返回的配置,它必须至少有一个组件。如果您的配置都没有组件,则不返回任何内容。

第一个查询等同于

select configuration.* from configuration

第二个相当于

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