Hibernate Criteria aPI Multiselect

时间:2015-05-04 15:02:31

标签: java hibernate postgresql-9.2 java-ee-7 jpa-2.1

如果我使用Hibernate Criteria API,如:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
Root<OneEntity> entityOneRoot = criteriaQuery.from(OneEntity.class);
Root<TwoEntity> entityTwoRoot = criteriaQuery.from(TwoEntity.class);
criteriaQuery.multiselect(OneEntity, TwoEntity);

我是否需要使用EQUAL-restriction(在SQL中作为ON限制)来平衡两个表(实体)之间的ID?由于这两个表的笛卡尔积?

criteriaQuery.where(criteriaBuilder.equal(OneEntity.get("fk_id"), TwoEntity.get("id")));

我的意思是......在使用连接的SQL中,我们需要使用on-clausule,如:

select * from table_1 t1, table_2 t2 where t1.t2_id=t2.t1_id;

但我无法在API标准中找到有关它的信息。

1 个答案:

答案 0 :(得分:1)

从JPA 2.1规范开始,章节 4.4.5加入

  

可以通过使用笛卡尔隐式指定内连接   FROM子句中的产品和WHERE中的连接条件   条款。在没有连接条件的情况下,这会减少到   笛卡尔积。

     

此通用连接样式的主要用例是连接时   condition不涉及映射的外键关系   实体关系。

     

示例:

     

SELECT c FROM Customer c, Employee e WHERE c.hatsize = e.shoesize

     

一般来说,使用这种内连接方式(也称为   theta-join)比明确定义的连接更不典型   关系。

由于JPQL的工作方式与Criteria API相同,因此查询中需要相同的限制。