2017-05-30 126 views
0

我正在嘗試使用Hibernate標準來選擇使用多對多關係中的表。 n-m表有一些額外的列,而不僅僅是每個表的id。休眠標準 - 多對多關係

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<User> criteria = builder.createQuery(Fornecedor.class); 
Root<User> root = criteria.from(User.class); 
criteria.select(root); 
root.fetch("userRolesList"); 
List<User> users = em.createQuery(criteria).getResultList(); 

在用戶類中我有userRolesList(n-m表),它具有角色。所以我有User - > UserRoles - > Role。當我嘗試打印用戶角色,例如,休眠拋出org.hibernate.LazyInitializationException導致角色哪裏都不牽強每個屬性映射爲FetchType.LAZY

  1. 當我更改代碼下面的一個。

代碼:

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<User> criteria = builder.createQuery(Fornecedor.class); 
Root<User> root = criteria.from(User.class); 
criteria.select(root);  
root.fetch("userRolesList"); 
root.fetch("userRolesList.role"); 
List<User> users = em.createQuery(criteria).getResultList(); 

然後我得到:

java.lang.IllegalArgumentException異常:找不到屬性與 在這個ManagedType給定的名稱[userRolesList.role] [網友]

我已經tryed很多選項像加入的情況,但仍然無法使其工作。

回答

1

看起來你正在試圖去取得太多。

試着在嬰兒的步驟做:

CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaQuery<User> criteria = builder.createQuery(Fornecedor.class); 

Root<User> root = criteria.from(User.class); 
criteria.select(root); 

Fetch<User, UserRoles> userRolesFetch = root.fetch("userRolesList", JoinType.INNER); 
Fetch<UserRoles, Role> roleFetch = userRolesFetch.fetch("role", JoinType.INNER); 

List<User> users = em.createQuery(criteria).getResultList(); 
+0

完美!我錯過了「內心深處」。我正在嘗試從根目錄獲取這兩個文件。完善!謝謝! – lfdajr