0

在我的应用程序中,我有两个实体UserActivity.

活动类是:

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

和类用户是:

 public class User{
 private String userName;
 }

现在我想使用 Hibernate Criteria 进行检索,所有这些条件都设置为Activities某个值,在属性中或两者兼而有之。我试过这个:Userusernameusersmanagers

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 假设我有 5Activity

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].

结果必须是第二、第三、第四个活动。但我只得到了三重活动。

4

2 回答 2

0

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

将此添加到您的 hibernate.cfg 文件中:

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

然后从您的应用程序触发查询并从控制台复制生成的查询,并直接在您的 sql intarface 中尝试,您会发现正在生成什么以及您真正想要什么。

于 2013-05-07T17:58:37.690 回答
0

您是否尝试过对代码进行单元测试?

与Activity 类activityManagers相比,我看到您在标准中使用。managers

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

也许这可能是您没有 2 managerson 结果的原因?

于 2013-05-07T09:37:32.597 回答