2
在我的應用程序有哪些有權限的角色,我曾經這樣做:JPA 2個標準與Hibernate查詢失敗左連接
Query query =
em.createQuery(
"SELECT distinct r FROM Role r left join fetch r.permissions "
+ "where r.domain = ? " + "order by r.createdOn ").setParameter(
1, domain);
return query.getResultList();
,但希望在偷懶初始化更好的控制。所以我正在嘗試這個,但它不起作用,因爲連接正在執行,就好像它是內部連接一樣,沒有帶來一個角色及其權限,而是每行和每個權限都帶來一個結果。
public List<Role> findAll()
{
CriteriaBuilder criteriaBuilder;
CriteriaQuery<Role> criteriaQuery;
Root<Role> queryRoot;
Order createdOnDesc;
TypedQuery<Role> typedQuery;
List<Role> roleResultList;
//initialize query system
criteriaBuilder = em.getCriteriaBuilder();
//select * from Role
criteriaQuery = criteriaBuilder.createQuery(Role.class);
queryRoot = criteriaQuery.from(Role.class);
//join permissions by default "LEFT"
//***THIS LINE IS FAILING*** ????
queryRoot.join(Role_.permissions);
//get query
typedQuery = em.createQuery(criteriaQuery);
//the steps below must be done to avoid lazy initialization exceptions
//in case we want to access the list at a later time
roleResultList = typedQuery.getResultList();
for (Role role : roleResultList)
{
role.getPermissionsList();
}
return roleResultList;
}
任何想法或想法將不勝感激。
這對我來說有點不清楚,我刪除了「加入」行,所有工作都很好!謝謝! – fedevela 2012-08-14 16:42:44