簡體   English   中英

如何使用 LEFT OUTER JOIN 創建 JPA 查詢?

[英]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.

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