2013-05-07 80 views
0

在我的應用程序中,我有兩個實體類User,Activity使用AND或OR運算符進行休眠標準查詢

活動類:

public class Activity{ 
private Set<User> users; 
private Set<User> activityManagers; 
} 

和類用戶是:

public class User{ 
private String userName; 
} 

現在我想要檢索,使用Hibernate標準的所有ActivitiesUserusername集到一定值時,在財產usersmanagers或兩者。 我已經試過這樣:

Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(Activity.class, "act"); 
criteria.createAlias("act.activityManagers", "manager"); 
criteria.createAlias("act.users", "user"); 
criteria.add(Restrictions.disjunction().add(Restrictions.eq("manager.username", userName)).add(Restrictions.eq("user.username", userName))); 
criteria.setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE); 

它不能正常工作。凡我做錯了,我不知道。誰能幫我?由於

UPDATE-1 假設我有5 Activity小號

First Activity:users[aaa,bbb,cccc],managers[ddddd]. 
Second Activity:users[userName,dddd],managers[userName,xxx,gggg]. 
Third Activity:users[userName,vvvvv,bbbb],managers[sss,cccc,tttt]. 
Fourth Activity:users[aaa,ffff,jjjj],managers[userName,uuuu,iiiii]. 
Fifth Activity:users[dddd,ffff],managers[jjjjj,iiii]. 

結果必然是第二,第三,第四活動。但我只獲得Thired活動。

+1

它不起作用? – Thihara 2013-05-07 09:28:47

+0

這不是給予預期的答案@Thihara。 – Diganta 2013-05-07 09:29:41

+1

@Diganta什麼是輸入,什麼是預期輸出,什麼是實際輸出?幫助我們幫助你。 – 2013-05-07 09:30:18

回答

0

你試過單元測試你的代碼嗎?

我看到你在你的標準中使用activityManagers,而在你的Activity類中使用managers

criteria.createAlias("act.activityManagers", "manager");

也許這可能是爲什麼你沒有對結果的2 managers的原因是什麼?

+0

我已更新我的問題。我現在清楚了嗎? – Diganta 2013-05-07 09:48:36

+0

您是否嘗試用'管理員'替換您的標準中的'activityManagers',就像我回答了你的問題? – DrSeb 2013-05-07 09:53:12

+0

謝謝你@DrSeb的回覆:對不起,我輸入錯了,屬性名是'activityManagers'而不是'managers',我已經更新了我的問題。 – Diganta 2013-05-07 09:59:07

0

Hibernate正在做你正在要求他做的事,但你可能沒有得到你想要的查詢。

添加到您的hibernate.cfg文件:

<property name="hibernate.show_sql">true</property> 

然後觸發從應用程序中查詢並從控制檯複製生成的查詢,並直接在SQL intarface試試吧,你會發現什麼正在生成,你真正想要什麼。