在我的应用程序中,我有两个实体类User
,Activity
。
活动类是:
public class Activity{
private Set<User> users;
private Set<User> activityManagers;
}
和类用户是:
public class User{
private String userName;
}
现在我想要使用Hibernate Criteria检索所有Activities
User
username
设置为特定值,属性users
或managers
或两者。
我试过这个:
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
s
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 Activity。
答案 0 :(得分:0)
您是否尝试过单元测试代码?
我发现您的条件中使用activityManagers
与活动类中的managers
相比。
criteria.createAlias("act.activityManagers", "manager");
也许这可能是你没有结果2 managers
的原因?
答案 1 :(得分:0)
Hibernate正在做你要求他做的事情,但你可能没有得到你想要的查询。
将其添加到您的hibernate.cfg文件中:
<property name="hibernate.show_sql">true</property>
然后从您的应用程序触发查询并从控制台复制生成的查询,并直接在您的sql intarface中进行尝试,您将了解生成的内容以及您真正想要的内容。