我有以下@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);
我错过了什么?我很茫然,我已经完成了教程,但没有找到我需要的答案。任何帮助非常感谢。
答案 0 :(得分:2)
因为默认情况下连接类型是内部的,这意味着对于要返回的配置,它必须至少有一个组件。如果您的配置都没有组件,则不返回任何内容。
第一个查询等同于
select configuration.* from configuration
第二个相当于
select configuration.* from configuration
inner join component on component.id = configuration.id