[英]Fetch relation of fetched relation in hibernate HQL query
我有實體客戶,汽車:
@Entity
public class Customer{
List<Car> cars;
...
}
@Entity
public class Car{
List<Customer> previousOwners;
...
}
基本上,客戶可以租用多輛汽車,而汽車會記住以前的所有者。
兩個實體都有更多的關系,而我省略了它們。
現在要檢索客戶的所有汽車:
public List<Car> getCars(int customerId) {
List<Car> cars= new ArrayList<>();
Transaction tx = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
tx = session.beginTransaction();
cars= (List<Car>) session.createQuery("SELECT cars FROM Customer u JOIN u.cars cars WHERE u.id IN :ids ").setParameter("ids", customerId).list();
} catch (HibernateException e) {
if (tx != null) tx.rollback();
e.printStackTrace();
}
return cars;
}
這將返回汽車列表,我需要使用JOIN將cuz lazyinitialization設置為FALSE。
現在,我想獲取Cars及其previos所有者。 但我無法想到任何查詢,我嘗試使用:
"SELECT cars FROM Customer u JOIN u.cars cars JOIN u.cars.previousOwners previousOwners WHERE u.id IN :ids "
但這沒有任何作用。
我想要的是當我嘗試使用時返回對象Car,其中包含list。
"SELECT cars, cars.previousOwner FROM Customer u JOIN u.cars cars JOIN u.cars.previousOwner previosOwner WHERE u.id IN :ids "
它返回了previousOwners的列表,但不在Car對象內部,而是作為返回列表中的第二個元素...
我如何創建這樣的查詢? 謝謝你的幫助!
您可能需要一個( LEFT
) JOIN FETCH
查詢:
SELECT cars FROM Customer u
JOIN u.cars cars
JOIN FETCH cars.previousOwners
WHERE u.id IN :ids
這指示Hibernate加入cars.previousOwners關系,即使在默認情況下它被聲明為使用惰性獲取。 如果您還想退回沒有前任車主的汽車,請使用左聯接提取。
有關更多信息,請參閱文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.