[英]How to create a JPA query with LEFT OUTER JOIN?
我正在學習 JPA 所以我想像這樣使用 mysql 查詢
SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1 LEFT
JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ROOT'
那么如何將其更改為 jpql 查詢代碼? 謝謝
如果您使用的是 EntityManager ,您可以按照這種方式
@PersistenceContext private EntityManager entityManager;
StringBuilder sb = new StringBuilder();
sb.append("SELECT t1.name , t2.name , t3.name , t4.name
FROM category t1 LEFT
JOIN category t2 ON t2.parent = t1.category_id
LEFT JOIN category t3 ON t3.parent = t2.category_id
LEFT JOIN category t4 ON t4.parent = t3.category_id
WHERE t1.name = :name"); // :name - you can pass parameter here
Query q = entityManager.createQuery(sb.toString());
q.setParameter("name", "ROOT");//Root is the value and name is the parameter
從查詢中刪除別名並運行它
select t1.name , t2.name , t3.name , t4.name
from category t1 left
join category t2 ON t2.parent = t1.category_id
left join category t3 ON t3.parent = t2.category_id
left join category t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ROOT'
如果您使用 spring 數據 jpa,您可以在存儲庫層中提供它,例如:
@Repository
public interface CategoryRepository extends JpaRepository<Category, Integer> {
@Query( value =
"SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t1.name = 'ROOT'",
nativeQuery = true)
List<Category> fetchCategoryDataLeftJoin();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.