`
mandy_yanzi
  • 浏览: 28458 次
  • 性别: Icon_minigender_2
  • 来自: 沈阳
社区版块
存档分类
最新评论

hibernate distinct 分页

 
阅读更多

获得条数:由于初次在hibernate中用distinct 先写个简单的sql试试。ok的。

     public int getSendCount(final String userid) {

        String sql = "select count( distinct t.ctid) from t_send t where t.userid='"
                + userid + "'";
        int result = 0;
        try {

            result = Integer.parseInt(String.valueOf(getHibernateTemplate()
                    .getSessionFactory().getCurrentSession()
                    .createSQLQuery(sql).uniqueResult()));//这块我再想session是否关闭的问题
        } catch (RuntimeException re) {
            result = 0;

        }
        return result;
    }

获得list分页:

 public List<?> findSendList(final String userid, final int startPoint,
            final int recordPerPage) {
        List instances = (List) getHibernateTemplate().executeFind(
                new HibernateCallback() {
                    /*
                     * 重载方法:@see
                     * org.springframework.orm.hibernate3.HibernateCallback
                     * #doInHibernate(org.hibernate.Session)
                     * 方法描述:(这里用一句话描述这个方法的作用) 适用条件:(这里描述这个方法适用条件 – 可选)
                     *
                     * @param session
                     *
                     * @return
                     *
                     * @throws HibernateException
                     */
                    public Object doInHibernate(Session session)
                            throws HibernateException {
                        Criteria criteria = session.createCriteria(TSend.class);

                        if (StringUtils.isNotEmpty(userid)) {
                            criteria.add(Restrictions.eq("userid", userid));
                        }
                        ProjectionList projectionList = Projections
                                .projectionList();
                        projectionList.add(Projections.property("contentid"));
                        projectionList.add(Projections.property("ctid"));
                        criteria.setProjection(Projections
                                .distinct(projectionList));

                        criteria.setFirstResult(startPoint);
                        criteria.setMaxResults(recordPerPage);
                        List list = criteria.list();
                        List result = new ArrayList();
                        if (list != null && list.size() > 0) {
                            Iterator it = list.iterator();
                            while (it.hasNext()) {
                                Object[] obj = (Object[]) it.next();
                                TSend tSend = new TSend();
                                tSend.setContentid(obj[0] + "");
                                tSend.setCtid(obj[1] + "");
                                if ("1".equals(tSend.getCtid())) {
                                    Criteria criteriaInfolist = session
                                            .createCriteria(TTest.class);
                                    criteriaInfolist.add(Restrictions.eq(
                                            "infoid", tSend.getContentid()));
                                    criteriaInfolist.add(Restrictions.eq(
                                            "ctid", tSend.getCtid()));
                                    TTest  tTest = (TTest) criteriaInfolist
                                            .uniqueResult();
                                    tSend.settTest(tTest );
                                }
                              
                                result.add(tSend);
                               
                            }
                        }
                        return result;
                    }
                });
        if (instances == null) {
            instances = new ArrayList();
        }
        return instances;
    }

0
0
分享到:
评论

相关推荐

    hibernate criteria 分组 排序 关联

    有时候,我们可能只关心结果集的一部分,例如分页显示数据。Hibernate提供了`setMaxResults()`和`setFirstResult()`两个方法来帮助实现这一功能。 **示例代码**: ```java Criteria criteria = session....

    hibernate 框架的基础四

    - **使用分页查询**:通过 `setMaxResults()` 和 `setFirstResult()` 方法来实现。 - **避免使用 `DISTINCT` 关键字**:除非必要,因为这可能会导致性能下降。 - **合理使用缓存**:Hibernate支持二级缓存,可以有效...

    SSH经典面试题汇总

    - **SQL优化**:使用`DISTINCT`关键字可以消除查询结果中的重复行,但在大数据量下可能会影响性能。针对分页查询,可以利用`setMaxResults`和`setFirstResult`方法实现高效的分页查询。 #### 3. Struts2的工作原理 ...

    java工程师面试题大全100%公司笔试题你都能碰到几个

    在Hibernate中,使用dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)可以去除重复项。 2. HTTP协议及端口、SMTP协议及端口 HTTP(HyperText Transfer Protocol)是一种超文本传输协议,使用80端口。SMTP...

    java软件工程师面试题

    Hibernate 提供了 `Criteria.DISTINCT_ROOT_ENTITY` 结果转换器,用于在查询时去除结果集中的重复实体。在 Criteria 查询中,添加 `dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 可以确保返回的实体...

    java工程师面试题大全

    - **解决方案**: 在Hibernate的Criteria API中,可以通过调用`setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)`方法来去除查询结果中的重复项。这会确保查询结果只包含唯一的根实体对象。 #### 二、HTTP与...

    NHibernate hql 可用函数,函数大全

    分页查询** - **语法**: `SET FIRST RESULT &lt;起始位置&gt; SET MAX RESULTS &lt;每页数量&gt;` - **示例**: `Query q = session.createQuery("FROM Category c ORDER BY c.name DESC"); q.setMaxResults(3); q....

    Java程序员面试题搜集

    Hibernate 提供了 `dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 来去除查询结果中的重复实体。这会在查询执行后对结果进行处理,确保返回的根实体是唯一的。 2. **HTTP和SMTP协议及端口**: HTTP...

    java面试题集锦(附答案)

    Hibernate中的Criteria API提供了去除查询结果重复项的方法,`dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);`这行代码会确保返回的结果集中不会有重复的根实体对象。 2. **HTTP与SMTP协议及其端口**:...

    Java面试题

    Hibernate中的Criteria查询可以通过设置ResultTransformer为DISTINCT_ROOT_ENTITY来去除查询结果中的重复实体。`dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 这一行代码的作用是确保返回的实体结果...

    300+道中高级java工程师面试题大全含答案文档下载

    1. **Hibernate离线查询去除重复项**:在Hibernate中,使用Criteria API时,可以设置ResultTransformer为`Criteria.DISTINCT_ROOT_ENTITY`来去除查询结果中的重复实体。 2. **HTTP与SMTP协议及端口**:HTTP是用于...

    进阶查询herbinate

    对于统计操作,Hibernate的`Projections`类提供了多种方法,如`avg()`用于计算平均值,`rowCount()`计算记录数,`count()`统计总数,`max()`获取最大值,`min()`获取最小值,以及`countDistinct()`计算唯一值的数量...

    java面试大全

    Hibernate 提供了一个方便的方法来去除查询结果中的重复实体,即 `dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);` 这行代码会确保返回的实体结果是唯一的,避免了由于关联查询导致的重复数据。 2. **...

    java工程师面试题

    Hibernate框架提供了Criteria接口,可以使用`Criteria.DISTINCT_ROOT_ENTITY`作为结果转换器来去除查询结果中的重复项。 2. HTTP与SMTP协议及其端口: - HTTP(超文本传输协议)默认使用80端口,用于客户端与...

    杭州公司笔试题目.doc

    dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) 是 Hibernate 框架中用于去除重复项的方法。Criteria.DISTINCT_ROOT_ENTITY 是一个标记,用于指定结果集的去重方式。在 Hibernate 中,我们可以使用 ...

    面试常问问题.doc

    13. **分页查询**:讨论不同数据库的分页查询方式,如MySQL的LIMIT和OFFSET,Oracle的ROWNUM,SQL Server的TOP和OFFSET-FETCH等,同时注意性能优化,避免全表扫描。 以上是面试中可能会被问到的关键点,每个点都...

    java工程师面试题大全-100%公司笔试题你都能碰到几个.pdf

    #### 一、Hibernate去除重复项 **问题**: 在Hibernate中如何去除查询结果中的重复项? **解决方案**: 使用`Criteria` API中的`setResultTransformer()`方法,并传递`Criteria.DISTINCT_ROOT_ENTITY`参数,可以有效...

    java 面试题 新的应该是 java 笔试题

    在JPA或Hibernate中,我们可以使用`Criteria.DISTINCT_ROOT_ENTITY`作为结果转换器来去除查询结果中的重复根实体。 2. **HTTP和SMTP协议及其端口**:HTTP协议通常运行在端口80上,用于传输网页内容;SMTP(Simple ...

    java工程师面试题大全-100%公司笔试题你都能碰到几个

    - **解决方案**: 在Hibernate的Criteria API中,可以通过调用`setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)`方法来去除查询结果中的重复项。 #### 二、HTTP与SMTP协议及其端口 - **HTTP**: 超文本传输协议...

Global site tag (gtag.js) - Google Analytics