簡體   English   中英

休眠條件aPI Multiselect

[英]Hibernate Criteria aPI Multiselect

如果我使用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限制(如SQL中的ON限制)來使兩個表(實體)之間的ID相等? 因為兩個表的笛卡爾積?

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

我的意思是...在使用聯接的SQL中,我們需要使用像這樣的子句:

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

但是我在API標准中找不到有關它的信息。

從JPA 2.1規范的第4.4.5章開始:

內部FROM可以通過在FROM子句中使用笛卡爾乘積和在WHERE子句中使用FROM條件來隱式指定。 在沒有連接條件的情況下,這會減少為笛卡爾積。

這種通用聯接方式的主要用例是聯接條件不涉及映射到實體關系的外鍵關系時。

例:

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

通常,使用這種內部聯接樣式(也稱為theta-join)比在關系上顯式定義的聯接要少。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM