【问题标题】:Hibernate Criteria query using AND,OR operator使用 AND、OR 运算符的休眠条件查询
【发布时间】:2013-05-07 09:22:01
【问题描述】:

在我的应用程序中,我有两个实体类User,Activity

活动类是:

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

而用户类是:

 public class User{
 private String userName;
 }

现在我想在属性usersmanagers 或两者中使用Hibernate Criteria 检索所有Userusername 设置为某个值的Activities。 我试过这个:

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);

它不能正常工作。我不知道哪里做错了。谁能帮我?谢谢

更新-1 假设我有 5 个Activitys

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

结果必须是 Second,Third,Fourth Activity。但我只得到了三次活动。

【问题讨论】:

  • 怎么不工作了?
  • 它没有给出预期的答案@Thihara。
  • @Diganta 输入是什么,预期输出是什么,实际输出是什么?帮助我们帮助您。
  • 您期望什么以及您得到的输出是什么?
  • 在我的应用程序中,我有 2 个Activitys 的managers 等于userName 字符串,还有一个users 等于userName 字符串。我应该获得 3 行,但我得到的一行,Activity 包含managers 的用户名等于用户名。 @Thihara

标签: java hibernate hibernate-criteria


【解决方案1】:

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

我发现您在标准中使用 activityManagers,而在您的 Activity 类中使​​用 managers

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

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

【讨论】:

  • 您是否尝试过像我回答的那样用“经理”替换标准中的“activityManagers”?
  • 感谢@DrSeb 的回复:抱歉我打错了,属性名称是activityManagers 而不是managers,我已经更新了我的问题。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2013-01-11
    • 2012-12-16
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多