问题描述
Select a.valA,b.valB
from tableA a join tableB b on a.joinCol = b.joinCol
where a.someCol = 1.
我想在对数据库的一次查询中使用Hibernate(和Spring Data)执行它。我知道,我只会写
Query query = em.createquery(...);
List<Object[]> resultRows = (List<Object[]>)query.getResultList();
但是我的问题是-是否可以以类型安全的方式(例如使用CriteriaQuery
来做到这一点?如您所见,困难在于,我需要从不同的表中选择值。有什么方法可以做到这一点?
解决方法
一个简单的示例,其中一个雇员与他可能拥有的多个工作有许多关系:
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Tuple> criteria = builder.createTupleQuery();
Root<TableA> root = criteria.from(TableA.class);
Path<Long> qId = root.get("id");
Path<String> qTitle = root.get("title");
Join<TableA,TableB> tableTwo = root.join("joinColmn",JoinType.INNER);
criteria.multiselect(qId,qTitle,tableTwo);
List<Tuple> tuples = session.createQuery(criteria).getResultList();
for (Tuple tuple : tuples)
{
Long id = tuple.get(qId);
String title = tuple.get(qTitle);
TableB tableB= tuple.get(tableTwo);
}
但是看到这里还有一个替代答案: JPA Criteria API - How to add JOIN clause (as general sentence as possible)