是否有可能(以及如何)创建一个条件查询,该条件查询会生成一个元素或数组,其中某些元素是来自集合值属性的集合?包含集合值属性的条件查询
鉴于其有名称的List<SubEntities>
subs
class Dummy {
String name;
List<SubEntity> subs;
}
class SubEntity {
// some attributes
}
我希望有一个标准API查询与结构导致一些
元组>
的Array
而不是实体Dummy
Tuple
会很好,对于Array
或List
也是如此。
我尝试以下:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> q = cb.createQuery(Object[].class);
Root<DummyEntityWithCollection> root = q.from(DummyEntityWithCollection.class);
Join<Object, Object> subs = root.join("subs");
q.select(cb.array(root.get("name"), subs));
List<Object[]> list = em.createQuery(q).getResultList();
但是包含在list
的Object[]
s与第二元件SubEntity
s,而不是List<SubEntity>
。
以同样的方式这一次失败:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();
Root<DummyEntityWithCollection> root = q.from(DummyEntityWithCollection.class);
Join<Object, Object> subs = root.join("subs");
q.multiselect(root.get("name"), subs);
List<Tuple> list = em.createQuery(q).getResultList();
这种变异
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> q = cb.createQuery(Object[].class);
Root<DummyEntityWithCollection> root = q.from(DummyEntityWithCollection.class);
q.select(cb.array(root.get("name"), root.get("subs")));
List<Object[]> list = em.createQuery(q).getResultList();
完全不和导致一个无效的SQL语句单一.
作为一个选择列工作(至少对于Hibernate和HSQLDB来说)。
问题How can I retrieve a collection property using criteria Api似乎表明,这是不可能的,但它基于Hibernate,我想获得基于JPA的答案。特别是指出JPA规范部分明确表示不可能的答案,我们将不胜感激。
感谢您的指点。我添加了一些明确的参考和链接。 –