2013-05-15 15 views
0

hibenate標準如何寫標準,該查詢在冬眠,如何實現相等利用hbm.xml文件中

select u.userID, ur.authority from users u, user_roles ur where u.userID = ur.userID and u.userName ="sandy" 

我想這種方式加入,但我得到一個空列表,

DetachedCriteria ownerCriteria = DetachedCriteria.forClass(users.class); 
ownerCriteria.setProjection(Property.forName("userID")); 
ownerCriteria.add(Restrictions.eq("userName", "sandy")); 

Criteria criteria = session.createCriteria(user_roles.class); 
criteria.add(Property.forName("userID").in(ownerCriteria)); 
System.out.println(criteria.list()); 

有人能幫我解決這個問題嗎?

回答

0

我可以看到你的u.userID = ur.userID在你的查詢中,是不是意味着用戶和user_roles之間有一對多的關係?

如果答案是肯定的,你可以做這樣的事情:

Criteria criteria = session.createCriteria(user_roles.class,"ur") 
    .createCriteria("userDto","u") 
    .add(Restrictions.eq("userName", "sandy")); 

然後添加投影,類似在您的查詢:

criteria.setProjection(Projections.projectionList() 
    .add(Projections.property("u.userID").as("userID")) 
    .add(Projections.property("ur.authority").as("authority"))); 

而且你可以在結果列表中艾克這個itarete :

for(Object[] item:criteria.list()){ 
    System.out.println((String)item[0]); //User id 
    System.out.println((String)item[1]); //Authority 
} 

關於你的代碼:

criteria.add(Property.forName("userID").in(ownerCriteria)); 

你正在比較一個屬性與子查詢,所以它可能沒有做你認爲它做的事,但我可能是錯誤的我的猜測。

相關問題