可以用 JPA / Hibernate criteriabuilder 做到这一点

问题描述 投票:0回答:1

我正在使用 oracle 并在 Hibernate 中使用 JPA,我们可以使用 criteriabuilder 来实现吗?

select col1,col2,col3 from table(schema.fn_name(param1,param2,param3)) order by col1,col2;

查询也可以显示其他附加字段(xyz),尽管没有这样的列。我可以用可调用语句做到这一点

java hibernate jpa jpa-2.0 criteriabuilder
1个回答
0
投票

是的,您可以在这种情况下使用 CriteriaBuilder。我想也许用这个例子可以证明:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object[]> query = criteriaBuilder.createQuery(Object[].class);

Root<EntityClass> root = query.from(EntityClass.class);
query.multiselect(root.get("col1"), root.get("col2"), root.get("col3"))
    .orderBy(criteriaBuilder.asc(root.get("col1")), criteriaBuilder.asc(root.get("col2")));

query.select(criteriaBuilder.array(root.get("col1"), root.get("col2"), root.get("col3")))
    .where(criteriaBuilder.equal(root.get("xyz"), criteriaBuilder.function("schema.fn_name", Object.class,
                criteriaBuilder.parameter(String.class, "param1"),
                criteriaBuilder.parameter(String.class, "param2"),
                criteriaBuilder.parameter(String.class, "param3"))))
    .orderBy(criteriaBuilder.asc(root.get("col1")), criteriaBuilder.asc(root.get("col2")));

TypedQuery<Object[]> typedQuery = entityManager.createQuery(query);
typedQuery.setParameter("param1", "value1");
typedQuery.setParameter("param2", "value2");
typedQuery.setParameter("param3", "value3");

List<Object[]> resultList = typedQuery.getResultList();
© www.soinside.com 2019 - 2024. All rights reserved.