2015-05-04 53 views
1

如果我使用Hibernate API的標準像:的Hibernate 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); 

我需要用相等的限制(如SQL ON-限制)的兩個表(實體)之間等於標識?由於兩個表的笛卡爾積?

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

我的意思是...在SQL使用連接,我們需要在-clausule使用像:

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

但我不能找到API標準有關它的信息。

回答

1

從JPA 2.1規範,章節4.4.5 加入

內連接可以被隱式地由FROM子句中使用笛卡爾 產品的指定,並在WHERE 連接條件條款。在沒有連接條件的情況下,這會減少到笛卡爾產品 。

這種廣義式聯接的主要用例是當聯接 條件不涉及將 映射到實體關係的外鍵關係時。

實施例:

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

通常,使用這種風格的內的連接(也被稱爲 θ-加入)比明確定義加入過 關係不太典型。

由於JPQL與Criteria API的工作方式相同,因此您的查詢需要等同限制。