您的位置:首页 > 编程语言 > Java开发

Hibernate 中的 DetachedCriteria查询(所有使用到的类属性必须在映射文件中存在)

2015-05-24 09:10 495 查看
DetachedCriteria对象为hibernate的离线查询对象(即该对象不是由session创建[由forClass或者forEntityName来创建],查询的动态sql语句在web层即可以生成[即可以脱离session来动态构建sql语句,进行查询])

查找哪一个类:

  DetachedCriteria criteria = DetachedCriteria.forClass(Project.class);

判断类属性(表中列,以后直接用列表示)是否等于某个值:

DetachedCriteria.add(Restrictions.eq("user.id", userId));

or查询条件

        Criterion leader = Restrictions.eq("leader.id", userId);

        Criterion member = Restrictions.eq("members.member.id", userId);

        LogicalExpression orExp1 = Restrictions.or(leader, member);

        criteria.add(orExp1);

like查询条件

Criterion fullName = Restrictions.like("fullName", findKey);

Criterion shortName = Restrictions.like("shortName", findKey);

Criterion leaderName = Restrictions.like("key", findKey);

LogicalExpression orExp = Restrictions.or( Restrictions.or(fullName, shortName), leaderName);

criteria.add(orExp);

5、查询数据一共有多少条

DetachedCriteria criteria = this.createFindProjectsCriteria(findKey, userId, scope) ;

criteria.setProjection(Projections.rowCount());

List results = getHibernateTemplate().findByCriteria(criteria);

int count = ((Integer) results.get(0)).intValue();

return count;

查询不重复的数据条数(其它同5)

 criteria.setProjection(Projections.countDistinct("key"));根据主键key来查

动态关联查询

     List cats = sess.createCriteria(Cat.class)

    .add( Restrictions.like("name", "Fritz%") )

    .setFetchMode("mate", FetchMode.EAGER)

    .setFetchMode("kittens", FetchMode.EAGER)
.list();

添加按列排序:

criteria.addOrder(Order.asc(类的属性));

去掉重复项  :

(1)criteria.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);

(2)detachedCriteria.setProjection(Projections.distinct(Projections.property(str)));

detachedCriteria.setProjection(Projections.groupProperty(str));

使用自定义的sql语言查询

criteria.add(Restrictions.sqlRestriction("  project_Id="+projectId+" connect by prior id= prev_ver "));

使用自定义的sql返回实体类的集合

criteria.add(Restrictions.sqlRestriction("  project_Id="+projectId+" connect by prior id= prev_ver ")).addxxx();

Query query =session.createSQLQuery(sql).addEntity(Project.class);

query.setString("active", "Y");

query.setLong("leaderId", userId); 

条件拼装完成后,边可以进行查询了 :

getHibernateTemplate().findByCriteria
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息