`
wangjian5748
  • 浏览: 209659 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

hibernate中重复显示问题的解决方法

阅读更多

下面是在hibernate中解决重复记录显示的一些思考
1.criterion.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)可以部分解决这个这问题,若结果需要分页显示这就无能为力了,因为这在内存中过滤重复的显示,分页显示结果总数就不准确了。
2.criteria.setProjection(Projections.distinct(Projections.id()))只能指定某一个字段为distinct,无法指定过滤某个对象
3.简单的hql也只能指定单个字段为distinct,无法指定某个对象为distinct
4.只能通过子查询来解决这个问题,hql语句的子查询的示例如下:
  from User u where u.id in (select u2.id from User u2, UserGroup ug where u2.group=ug and ug.name=?) order by u.name asc
5.因为我一直倾向于使用criterion来解决查询问题,而且criterion也提供支持子查询的Subqueries类,没想到在使用Subqueries的时候遇到了莫名奇妙的bug,在子查询语句中无法关联对象,
  比如上面的hql语句中,在使用criterion的时候,就会丢掉UserGroup对象
  示例代码:
  DetachedCriteria subquery = DetachedCriteria.forClass(User.class);
  subquery.setProjection(Projections.property("id"));
  subquery.createCriteria("UserGroup").add(Restrictions.eq("name", groupName));
 
  DetachedCriteria criteria = DetachedCriteria.forClass(User.class);
  criteria.add(Subqueries.propertyIn("id", subquery))
  getHibernateTemplate().findByCriteria(criteria);
  上面的criterion语句在执行的时候,解析出的sql语句就会把UserGroup对应的T_UserGroup表丢掉,但是T_UserGroup.name的查询条件没丢,当然这样可定要报错的,不知道什么原因?

6.在http://opensource.atlassian.com/projects/hibernate/browse/HB-520有一些讨论,虽然是讨论hibrenate2的版本,但还是值得一看的
7.在http://www.jroller.com/page/RickHigh?entry=hibernate_query_getting_rid_of上也有一些值得一看的东西
 



分享到:
评论
4 楼 sunspring 2009-12-04  
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(TbStationeryType.class);

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

List result = getHibernateTemplate().findByCriteria(detachedCriteria);

return result;
3 楼 bruce198 2009-09-15  
什么情况下会查询出重复记录?  查一张表的时候还是在关联查询的时候?
2 楼 weidewei 2008-10-30  
在等待答案....
1 楼 mrjamesli 2008-10-10  
兄弟,这个问题你解决了吗?我现在也是这个问题搞的不能继续了

相关推荐

    struts2+spring+hibernate分页显示

    在这个“Struts2+Spring+Hibernate分页显示”的解决方案中,我们将深入探讨如何利用这三大框架实现数据的分页展示。 Struts2作为MVC(模型-视图-控制器)架构的一部分,主要负责处理HTTP请求,控制应用程序的流程。...

    hibernate通用分页

    "hibernate通用分页"就是为了解决这一问题,提供一个方便、易用的分页解决方案。 分页的核心在于如何根据用户请求的数据范围(如页码和每页显示条数)来查询数据库,并返回相应的结果集。在Hibernate中,我们可以...

    hibernate struts2 spring

    - 良好的社区支持:这三个框架都有庞大的开发者社区,遇到问题时可以获得丰富的资源和解决方案。 然而,集成SSH也有其挑战,如学习曲线较陡峭,配置文件繁多,以及可能产生的性能问题等。因此,在选择SSH作为开发...

    Hibernate 缓存 实例

    在同一个Session内,对于同一对象的多次加载或获取(如load和get方法),不会重复执行SQL,因为数据会从一级缓存中获取。以下是一级缓存的示例代码: ```java public class CacheLevel1Test extends TestCase { //...

    Struts2+Hibernate实现文件上传

    在实际操作中,文件上传可能会遇到一些常见的问题,例如文件大小限制、文件类型检查、防止重复文件名等。这些可以通过在Action类中添加额外的验证逻辑来解决。例如,可以使用Struts2的拦截器或者自定义Validator来...

    ssh2 jQuery Validator验证重复添加

    "ssh2 jQuery Validator验证重复添加"这个主题可能涉及到在使用jQuery Validator时遇到的一个问题,即在同一个表单或多个表单中多次添加相同的验证规则,可能导致不必要的复杂性或者错误。这可能是因为开发者在编写...

    Hibernate 的学习笔记

    - **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - **作用**:通过 ORM 技术,Hibernate 能够在 Java 对象模型与...

    struts与hibernate实例

    Struts和Hibernate是Java开发中两个非常重要的框架,它们分别在MVC(Model-View-Controller)模式和对象关系映射(ORM)领域扮演着关键角色。本实例将深入探讨如何将这两个框架集成,实现数据的添加、删除和修改功能...

    Hibernate入门.docx

    尽管这些方法在一定程度上解决了问题,但仍然存在一些不足之处,比如: - **代码冗余**:每次操作都需要重复相同的模式,如打开连接、执行SQL、处理结果集等。 - **异常处理复杂**:需要手动处理可能发生的各种异常...

    Hibernate事务缓存

    本文详细介绍了Hibernate中的事务管理和缓存使用,包括事务的基本概念、ACID特性、事务边界声明,以及解决并发问题的方法。同时,还介绍了Hibernate的一级缓存和二级缓存机制,并通过一个模拟银行转账程序的示例来...

    hibernate笔记

    为了解决这些问题,DAO(Data Access Object)模式被引入,通过封装数据库操作,提高了代码的可复用性。进一步,为了优化资源管理,数据库连接池技术应运而生,它可以高效地管理和重用数据库连接。 Hibernate在DAO...

    Hibernate学习教程和笔记

    - **概念**: O/R Mapping是将程序中的对象模型映射到关系型数据库的表格上,解决对象与关系型数据库之间的不匹配问题。 - **常见框架**: Hibernate、MyBatis、JPA等。 #### 三、模拟Hibernate原理 - **项目名称**: ...

    基于Hibernate、 Spring、 Spring mvc、 Bootstrap的管理系统实现

    在管理系统中,Bootstrap可以提升用户体验,使界面在不同设备上显示良好,同时提供诸如模态框、导航栏、表单控件等丰富的UI元素。 在实际项目中,这四者的结合使用通常如下:Hibernate负责与数据库交互,存储和获取...

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

    利用struts+spring+hibernate实现的网上定餐系统

    在本项目中,Spring可能被用来配置数据源、事务管理、以及整合Struts和Hibernate。 Hibernate是Java领域广泛使用的ORM(对象关系映射)工具,它简化了数据库操作,将数据库记录映射为Java对象,使得开发者可以使用...

    struts spring hibernate面试题

    - **集成方法**:在 Spring 中,可以通过 `SessionFactory` 和 `HibernateTemplate` 或 `JpaTemplate` 简化 Hibernate 的使用。`SessionFactory` 提供了创建 Session 的工厂,而 `HibernateTemplate` 或 `...

    SSH(Spring、struts、hibernate)的框架整合.docx

    在给定的文档片段中,可以看到`Userinfo`是一个实体类,`UserDaoImpl`是DAO实现类,其中使用了Hibernate的通用方法来执行查询。`applicationContext.xml`配置文件展示了如何配置Spring的数据源和SessionFactory。 ...

    ecside_for_hibernate

    ecside在这里作为一个插件,可能用于处理数据访问层的部分,与Hibernate结合,提供了一种高效的数据库操作解决方案。 **标签解析:“ecside”**:ecside是本项目的关键词,它是一个轻量级的Web开发工具,主要目标是...

    Struts,Spring,Hibernate三大框架的面试题目

    - **依赖注入 (DI):** Spring 通过 DI 解决了对象间的依赖问题,使得组件之间的耦合度降低。 - **面向切面编程 (AOP):** Spring 支持 AOP 编程,可以在不修改业务逻辑代码的情况下添加日志记录、事务管理等横切...

Global site tag (gtag.js) - Google Analytics