2013-10-24 43 views
0

如何根據用戶標識從兩個表中獲取數據? * ** * ** * ** * ** * ** * *角色類* ** * ** * ** * ** * ** * ** * ** * *如何使用Hibernate從兩個表(一對多關係)獲取數據Createcriteria

@Entity 
    @Table(name = "IUC_CON_USER_ROLE_MAP") 
    public class Role { 
     @Id 
     @Column(name="F_ROLE_MAP_ID") 
     int rolemap; 

     @Column(name="F_ROLE_ID") 
     int roleid; 


     @OneToMany(mappedBy="role",fetch=FetchType.EAGER) 
     Set<User> F_USER_ID; 

** * ** * ** * ** * ** * ** * ** *用戶等級* ** * ** * ** * ** * ** * ** *

@Entity 
    @Table(name = "IUC_CON_USER") 
    public class User implements Serializable { 


     @Id 
     @Column(name = "F_USER_ID") 
     private int id; 

     @Column(name = "F_USER_NAME") 
     private String name; 

     @Column(name = "F_USER_PWD") 
     private String pwd; 


     @ManyToOne 
     @JoinColumn(name="F_USER_ID",insertable=false,updatable=false) 
     private Role role; 

       ----------setter and getter for properties 
    } 

外部編輯: 標準創建代碼:

DetachedCriteria uCrit = DetachedCriteria.forClass(User.class, "user"); 
uCrit.add(Restrictions.eq("user.id", 5)); 
uCrit.setProjection(Projections.property("user.id")); 
DetachedCriteria criteria = DetachedCriteria.forClass(Role.class, "role"); 
criteria.add(Property.forName("role.F_USER_ID").in(uCrit)); 
List lt1 = criteria.getExecutableCriteria(getSession()).list(); 
+0

你想獲取'User'以及相關的'Role'? –

+0

@Debojit'是的,我想用戶與角色' – NBR

回答

0

使用createAlias

criteria.createAlias("propertiy_of_main_entity", "aliastName"); 

對我來說,這通過一些實體屬性名稱獲取與根實體關聯的實體;

你的情況類似

createAlias("F_USER_ID", "roleUsers"); 

應該做的。

無論如何,爲什麼你的字段名後面的命名爲Java的教義? WHY_IS_IT_UPPERCASED_WITH_DASHES_LIKE_CONSTANTS_?

總之一切都在Hibernate documentation解釋。如果別名不起作用,就像在我提供的鏈接下從Hibernate文檔中獲取關聯一樣。

+0

'請如果你不介意你會詳細說明上述代碼' – NBR

+0

我做到了。第二個代碼示例是指您的代碼。 – Antoniossss

+0

@Antonisss我得到這個錯誤:-Exception在線程「主」org.hibernate.QueryException:無法解析屬性:F_USER_ID:com.basu.User – NBR

0

您可以使用下面一系列語句與沿取UserRole

int userId = 1; 
Criteria criteria = session.createCriteria(User.class); 
criteria.setFetchMode("role", FetchMode.JOIN); 
criteria.add(Restrictions.eq("id", userId)); 
User user = (User) criteria.uniqueResult(); 

休眠的默認取的策略是懶洋洋地獲取協會,你需要在代碼運行時重寫,如果您希望協會(此處爲Role)與User一起提取。第三條語句是通過將獲取模式設置爲JOIN來完成此重寫。此語句FetchMode.JOIN覆蓋了默認行爲,因此Role將與User一起提取。

+0

@Saikai當我執行上面的代碼我得到錯誤,而且在控制檯中生成的查詢User.id不是與Role.F_user_id映射Role_map_id是與User.id映射。 – NBR

+0

但您提供的Criteria創建代碼與我答案中的代碼不同。你有沒有試過我的代碼? –

+0

@Saikai其實用戶表中有一行F_User_id = 1,但我得到以下錯誤:-Exception在線程「main」org.hibernate.ObjectNotFoundException:沒有行與給定的標識符存在:[com.basu.Role#1 ] – NBR

相關問題