我有两个实体:Issue
和Issue_Tracker
。我正在使用Hibernate 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中的问题列表
public list showHelpDeskIssues(DetachedCriteria dc,int from,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; } }
有关简要说明,请参阅此问题how to show two tables data in jqgrid using struts2 - jqgrid plugin and hibernate 任何帮助都会很棒。
答案 0 :(得分:7)
您可以尝试以下
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是Issues.java
中的属性名称,child是IssueTracker.java
中的属性。
答案 1 :(得分:7)
那么,
关注一个样本...
Criteria crit = session.createCriteria(Issues.class);
crit.createAlias("otherClass", "otherClass");
crit.add(Restrictions.eq("otherClass.status", "Escalate To"));
List result = crit.list();
我想这可以帮助!!
答案 2 :(得分:1)
试试这个,因为这对我有用
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;
答案 3 :(得分: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;
}
这应该可以解决您的问题。让我知道您是否遇到任何麻烦。