Если вы используете 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'