如果我使用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标准中找到有关它的信息。
答案 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相同,因此查询中需要相同的限制。