8

我有两个实体:IssueIssue_Tracker. 我正在使用休眠 3.6。

SELECT `issues`.`issue_id`,
       `issues`.`issue_raised_date`,
       `issues`.`issue_description`,
       `issue_tracker`.`tracker_status`
FROM `issues`
   LEFT JOIN  `issue_tracker` ON `issues`.`issue_id` = `issue_tracker`.`issue_id`
WHERE `issues`.`status`="Escalate To"

如何使用 Hibernate Criteria 实现这一点,最重要的是,我必须使用它进行分页。

和My Dao如下显示jqgrid中的Issue列表

公共列表 showHelpDeskIssues(DetachedCriteria dc, int from, int size) {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
 try
  {

    Criteria criteria = dc.getExecutableCriteria(session);
    criteria.setFirstResult(from);
    criteria.setMaxResults(size);
    criteria.add(Restrictions.eq("status","Escalate To"));

    return criteria.list();
  }
  catch (HibernateException e)
  {
    e.printStackTrace();
    throw e;
  } }

有关简要说明,请参考这个问题如何使用 struts2 在 jqgrid 中显示两个表数据 - jqgrid 插件和休眠 任何帮助都会很棒。

4

4 回答 4

8

你可以试试以下

Criteria criteria = session.createCriteria(Issues.class);
criteria.setFirstResult(from);
criteria.setMaxResults(size);
criteria.setFetchMode('parent.child', FetchMode.JOIN);
criteria.add(Restrictions.eq("status", "Escalate To");
List<Issues> list= criteria.list();

这里 parent 是 in 中的属性名称Issues.java, child 是 in 中的属性IssueTracker.java

于 2013-01-08T12:53:42.897 回答
8

好,

跟随一个样本...

Criteria crit = session.createCriteria(Issues.class);
crit.createAlias("otherClass", "otherClass");
crit.add(Restrictions.eq("otherClass.status", "Escalate To"));
List result = crit.list();

我认为这可以提供帮助!

于 2013-01-08T13:05:19.270 回答
2

试试这个,因为这对我有用

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Issues.class, "issues");
criteria.setFetchMode("issues.issuetracker", FetchMode.JOIN);
criteria.createAlias("issues.issuetracker", "issuetracker");
criteria.add(Restrictions.eq("status","Escalate To"));
List list = criteria.list();
return list;
于 2016-02-26T13:36:58.410 回答
1

注意:在 Hibernate 标准中,内外连接和内连接是一回事。不要混淆。

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
 try{
     Criteria criteria = session.createCriteria(Issues.class, "issues");
     criteria.setFirstResult(from);
     criteria.setMaxResults(size);
     criteria.createAlias("issues.issuestracker", "issuestracker", JoinType.LEFT_OUTER_JOIN);
     criteria.add(Restrictions.eq("issues.status", "Escalate To"));

     return criteria.list();
   }catch(HibernateException e){
       e.printStackTrace();
       throw e;
     }

这应该可以解决您的问题。如果您遇到任何麻烦,请告诉我。

于 2020-06-03T08:43:07.987 回答