hibernate的criteria查询

 public List<Record> list(String confID, String srcpath, Date dateTime,
            int quality, int videoBackground, int transparency, int layoutId) {
        Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Record.class,"re");
        criteria.add(Restrictions.eq("re.confid", "a83ec67f04934c1f8648f892f3b5ea30"));
        criteria.add(Restrictions.eq("re.srcpath","d://movie"));
        criteria.add(Restrictions.eq("re.transcode_start_time","2017-11-16 13:50:13"));
        criteria.createAlias("re.rc", "rrc",CriteriaSpecification.LEFT_JOIN);//关联主对象中的附属对象的属性名
        criteria.add(Restrictions.eq("rrc.quality",1));
        criteria.add(Restrictions.eq("rrc.video_background",1));
        criteria.add(Restrictions.eq("rrc.transparency",1));
        criteria.add(Restrictions.eq("re.layoutId",1));
        criteria.setFetchMode("rrc",FetchMode.JOIN);
        List<Record> list = criteria.list(); 
        for(Record re:list){
            System.out.println("11123"+re.getLayoutid());
        }
        return (List<Record>)criteria.list();
    }
``` 现遇问题, 控制台不能show_sql,也不报错。对应的sql语句在数据库中能查询数据。

System.out.println("11123"+re.getLayoutid());打印了吗?

hibernate配置文件中有show_sql 属性 改成true 即可

告诉你一个笨办法,打个log看看list的长度是多少,看看是不是大于0,如果是0,那么肯定是你的criteria写的有问题。然后只留criteria.add(Restrictions.eq("re.confid", "a83ec67f04934c1f8648f892f3b5ea30"));这一个条件,一步步的加条件,看看到底是哪条语句出了问题。

public int selectByType(int type) {
// TODO Auto-generated method stub
//QBC查询
Criteria criteria=dao.getSession().createCriteria(News.class);
if(type>=0)
criteria.add(Restrictions.eq("type", type));//具体的查询条件是通过add()方法添加的,而且具体的查询条件的表达式运算是通过Expression或Restrictions指定的
criteria.setProjection(Projections.rowCount());//在Hibernate3中增加了Projections以及ProjectionList类,这两个类对分组与统计功能进行封装
//在获得Projection对象之后,使用setProjection()的方法将它添加到Criteria对象中,使用rowCount()查询记录总数
return ((Number) criteria.uniqueResult()).intValue();//总记录数
}
@SuppressWarnings("unchecked")
@Override
public List selectByType(int type, int currentPage, int maxResult) {
// TODO Auto-generated method stub
Criteria criteria=dao.getSession().createCriteria(News.class);
if(type>-1)
criteria.add(Restrictions.eq("type", type));
criteria.setFirstResult(currentPage).setMaxResults(maxResult).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
@SuppressWarnings("unchecked")
@Override
public List selectAll(int userid, int currentPage, int maxResult) {
// TODO Auto-generated method stub
Criteria criteria=dao.getSession().createCriteria(News.class);
if(userid>0)
criteria.add(Restrictions.eq("userId", userid));
criteria.setFirstResult(currentPage).setMaxResults(maxResult).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
//criteria.setFirstResult()设定查询返回结果的第一行的位置;criteria.setMaxResults()限定查询数据返回的行数
return criteria.list();
}
@Override
public int selectAll(int userid) {
// TODO Auto-generated method stub
Criteria criteria=dao.getSession().createCriteria(News.class);
if(userid>0)
criteria.add(Restrictions.eq("userId", userid));
criteria.setProjection(Projections.rowCount());
return ((Number) criteria.uniqueResult()).intValue();
}
这是我用SpringMVC写项目Dao层用的关于Criteria的查询方法,你可以看下

先看看配置文件中是否有问题,再看业务层