我正在使用 oracle 并在 Hibernate 中使用 JPA,我们可以使用 criteriabuilder 来实现吗?
select col1,col2,col3 from table(schema.fn_name(param1,param2,param3)) order by col1,col2;
查询也可以显示其他附加字段(xyz),尽管没有这样的列。我可以用可调用语句做到这一点
是的,您可以在这种情况下使用 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();