Hibernate:使用 CriteriaQuery 从多个表中查询 select 值
Hibernate: Query to select values from multiple tables using CriteriaQuery
比方说,我有一个类似
的查询
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
?困难在于,如您所见,我需要 select 来自不同表的值。有什么办法可以做到这一点吗?
一个简单的例子,其中一个员工与他可能拥有的多个工作有多对多关系:
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)
比方说,我有一个类似
的查询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
?困难在于,如您所见,我需要 select 来自不同表的值。有什么办法可以做到这一点吗?
一个简单的例子,其中一个员工与他可能拥有的多个工作有多对多关系:
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)