【发布时间】:2012-02-05 19:24:49
【问题描述】:
我在设置以下查询的where 子句时遇到了一些问题:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Configuration> cq = cb.createQuery(Configuration.class);
Root<Configuration> conf = cq.from(Configuration.class);
MapJoin<Configuration, String, Component> mapJoin = conf.join(Configuration_.components, JoinType.LEFT);
cq.where(cb.and(cb.like(mapJoin.key(), "%abc%"),
cb.like(mapJoin.value().get(Component_.displayName), "%def%")));
cq.select(pc);
我基本上是在尝试获取所有包含组件映射中的条目的配置,其键包含“abc”并且其值包含“def”。
根据http://blogs.oracle.com/ldemichiel/entry/java_persistence_2_0_proposed,Maps 部分的示例代码,我希望这可以工作,但显然我遗漏了一些东西。
实体具有以下结构:
@Entity
public class Configuration{
@Id
protected Long id;
@OneToMany
protected Map<String, Component> components;
}
和
@Entity
public class Component{
@Id
protected Long id;
protected String displayName;
}
提前感谢您,感谢您的帮助。
【问题讨论】:
标签: jpa jpa-2.0 criteria criteria-api