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