Как создать запрос JPA с LEFT OUTER JOIN? - PullRequest
3 голосов
/ 31 октября 2019

Я изучаю 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? Спасибо

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Если вы используете пружинные данные 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();

    }
0 голосов
/ 31 октября 2019

Если вы используете 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...