【问题标题】:jpa criteria query fails after MapJoinMapJoin 后 jpa 条件查询失败
【发布时间】:2012-02-05 17:06:51
【问题描述】:

我有以下@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);

我错过了什么?我很茫然,我已经完成了教程,但还没有找到我需要的答案。非常感谢任何帮助。

【问题讨论】:

    标签: jpa jpa-2.0 criteria criteria-api


    【解决方案1】:

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

    第一个查询相当于

    select configuration.* from configuration
    

    而第二个等价于

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

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多