下面是在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上也有一些值得一看的东西
分享到:
相关推荐
在这个“Struts2+Spring+Hibernate分页显示”的解决方案中,我们将深入探讨如何利用这三大框架实现数据的分页展示。 Struts2作为MVC(模型-视图-控制器)架构的一部分,主要负责处理HTTP请求,控制应用程序的流程。...
"hibernate通用分页"就是为了解决这一问题,提供一个方便、易用的分页解决方案。 分页的核心在于如何根据用户请求的数据范围(如页码和每页显示条数)来查询数据库,并返回相应的结果集。在Hibernate中,我们可以...
- 良好的社区支持:这三个框架都有庞大的开发者社区,遇到问题时可以获得丰富的资源和解决方案。 然而,集成SSH也有其挑战,如学习曲线较陡峭,配置文件繁多,以及可能产生的性能问题等。因此,在选择SSH作为开发...
在同一个Session内,对于同一对象的多次加载或获取(如load和get方法),不会重复执行SQL,因为数据会从一级缓存中获取。以下是一级缓存的示例代码: ```java public class CacheLevel1Test extends TestCase { //...
在实际操作中,文件上传可能会遇到一些常见的问题,例如文件大小限制、文件类型检查、防止重复文件名等。这些可以通过在Action类中添加额外的验证逻辑来解决。例如,可以使用Struts2的拦截器或者自定义Validator来...
"ssh2 jQuery Validator验证重复添加"这个主题可能涉及到在使用jQuery Validator时遇到的一个问题,即在同一个表单或多个表单中多次添加相同的验证规则,可能导致不必要的复杂性或者错误。这可能是因为开发者在编写...
- **概念**:Hibernate 是一种“对象/关系映射”(Object/Relational Mapping,简称 ORM)技术,用于解决 Java 应用程序与关系型数据库交互的问题。 - **作用**:通过 ORM 技术,Hibernate 能够在 Java 对象模型与...
Struts和Hibernate是Java开发中两个非常重要的框架,它们分别在MVC(Model-View-Controller)模式和对象关系映射(ORM)领域扮演着关键角色。本实例将深入探讨如何将这两个框架集成,实现数据的添加、删除和修改功能...
尽管这些方法在一定程度上解决了问题,但仍然存在一些不足之处,比如: - **代码冗余**:每次操作都需要重复相同的模式,如打开连接、执行SQL、处理结果集等。 - **异常处理复杂**:需要手动处理可能发生的各种异常...
本文详细介绍了Hibernate中的事务管理和缓存使用,包括事务的基本概念、ACID特性、事务边界声明,以及解决并发问题的方法。同时,还介绍了Hibernate的一级缓存和二级缓存机制,并通过一个模拟银行转账程序的示例来...
为了解决这些问题,DAO(Data Access Object)模式被引入,通过封装数据库操作,提高了代码的可复用性。进一步,为了优化资源管理,数据库连接池技术应运而生,它可以高效地管理和重用数据库连接。 Hibernate在DAO...
- **概念**: O/R Mapping是将程序中的对象模型映射到关系型数据库的表格上,解决对象与关系型数据库之间的不匹配问题。 - **常见框架**: Hibernate、MyBatis、JPA等。 #### 三、模拟Hibernate原理 - **项目名称**: ...
在管理系统中,Bootstrap可以提升用户体验,使界面在不同设备上显示良好,同时提供诸如模态框、导航栏、表单控件等丰富的UI元素。 在实际项目中,这四者的结合使用通常如下:Hibernate负责与数据库交互,存储和获取...
以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。 工程...
在本项目中,Spring可能被用来配置数据源、事务管理、以及整合Struts和Hibernate。 Hibernate是Java领域广泛使用的ORM(对象关系映射)工具,它简化了数据库操作,将数据库记录映射为Java对象,使得开发者可以使用...
- **集成方法**:在 Spring 中,可以通过 `SessionFactory` 和 `HibernateTemplate` 或 `JpaTemplate` 简化 Hibernate 的使用。`SessionFactory` 提供了创建 Session 的工厂,而 `HibernateTemplate` 或 `...
在给定的文档片段中,可以看到`Userinfo`是一个实体类,`UserDaoImpl`是DAO实现类,其中使用了Hibernate的通用方法来执行查询。`applicationContext.xml`配置文件展示了如何配置Spring的数据源和SessionFactory。 ...
ecside在这里作为一个插件,可能用于处理数据访问层的部分,与Hibernate结合,提供了一种高效的数据库操作解决方案。 **标签解析:“ecside”**:ecside是本项目的关键词,它是一个轻量级的Web开发工具,主要目标是...
- **依赖注入 (DI):** Spring 通过 DI 解决了对象间的依赖问题,使得组件之间的耦合度降低。 - **面向切面编程 (AOP):** Spring 支持 AOP 编程,可以在不修改业务逻辑代码的情况下添加日志记录、事务管理等横切...