У меня возникли проблемы с установкой предложения 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;
}
Заранее спасибо, любая помощь приветствуется.