Jpa 包含集合值属性的条件查询

Jpa 包含集合值属性的条件查询,jpa,criteria-api,Jpa,Criteria Api,是否有可能(如果有,如何)创建一个条件查询,以生成一个元组或数组,其中一些元素是集合值属性的集合 给定一个实体Dummy,该实体有一个名为subs的列表 class Dummy { String name; List<SubEntity> subs; } class SubEntity { // some attributes } 但是列表中包含的对象[]s作为第二个元素子实体s而不是列表 这一个以同样的方式失败: CriteriaBuilder cb =

是否有可能(如果有,如何)创建一个条件查询,以生成一个元组或数组,其中一些元素是集合值属性的集合

给定一个实体
Dummy
,该实体有一个名为
subs的
列表

class Dummy {
    String name;
    List<SubEntity> subs;
}

class SubEntity {
    // some attributes
}
但是
列表中包含的
对象[]
s作为第二个元素
子实体
s而不是
列表

这一个以同样的方式失败:

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 q=cb.createTupleQuery();
Root=q.from(dummeyentitywithcollection.class);
Join subs=root.Join(“subs”);
q、 multiselect(root.get(“name”),subs);
List 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(); 
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery q=cb.createQuery(对象[].class);
Root=q.from(dummeyentitywithcollection.class);
q、 选择(cb.array(root.get(“name”)、root.get(“subs”));
List List=em.createQuery(q).getResultList();
根本不起作用,并导致一个无效的SQL语句,其中一个
列作为一个select列(至少对于Hibernate和HSQLDB)

这个问题似乎表明这是不可能的,但它是基于Hibernate的,我想得到一个基于JPA的答案。特别是,如果您能回答JPA规范中明确指出这是不可能的部分,我们将不胜感激。

第4.8节中的select条款如下所示:

select_clause ::= SELECT [DISTINCT] select_item {, select_item}*
select_item ::= select_expression [[AS] result_variable]
select_expression ::= single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable | OBJECT(identification_variable) | constructor_expression
因此,您可以看到多值表达式在JPQL中是不可选择的

条件只是使用API和对象创建查询的一种方法。参见JPA规范第6.1章:

条件查询的语义被设计为反映Java持久性查询的语义 语言查询


因此,假设相同的约束适用于Criteria API是合理的。

感谢您提供的指针。我添加了一些明确的引用和链接。
select_clause ::= SELECT [DISTINCT] select_item {, select_item}*
select_item ::= select_expression [[AS] result_variable]
select_expression ::= single_valued_path_expression | scalar_expression | aggregate_expression | identification_variable | OBJECT(identification_variable) | constructor_expression