Hibernate使用总结
hibernate 实现多表连接查询结果处理
因多表连接查询在项目中用的比较多,且查询结果集不与任何一个实体类对应,怎么解决呢?
1,传统方式
查询并返回各个表的字段,调用query.List(),这个List是一个Object[]值,之后循环获取数组中的各个值,也就是说这里需要自己手动获取封装数据,基本代码如下:
List result = q.list(); Iterator it = result.iterator(); while (it.hasNext()) { Object[] tuple = (Object[]) it.next(); Members members = (Members) tuple[ 0 ]; String className = (String) tuple[ 1 ]; }
2,构造自己的复合类型
a,添加一个映射类
eg:新建一个映射类UserWithRole,需要带属性的构造函数;
HQL = SELECT NEW UserWithRole(U.ID,U.NAME,R.NAME) FROM User U, ROLE R WHERE ......;
b,不添加映射类,直接使用已有实体类,添加需要的构造函数;
HQL = SELECT NEW User(U.ID,U.NAME,R.NAME) FROM User U, ROLE R WHERE ......;
SQL中UserWithRole/User(U.ID,U.NAME,R.NAME)的字段数就是UserWithRole/User类中的构造函数,
这里需要注意使用时可能会报异常:Unable to locate appropriate constructor on class
出现这个异常需要检查以下几种情况:
1)参数构造器的参数类型是否正确
2)参数构造器的顺序和hql中的顺序是否一致
3)参数构造器的参数个数是否和hql中的个数一致
4)参数构造器的参数类型是否TimeStamp
其中第4种情况较为复杂,需要做特殊处理:
基本代码如下:
HQL = SELECT NEW EXAMPLE(E.ID,A.NAME,A.DATE,A.EMAIL) FROM EXAMPLE E, ATABLE A WHERE .....;
实体:
public class Example{ private TimeStamp date; //其他属性这里省略... //需要注意其构造函数 public Example(Long id, String name, Object date, String email){ this.id = id; this.name = name; this.date = StringUtls.stringToTimeStamp(date.toString());//注意:这里需要将Object转换成TimeStamp; } }
本文最后有借鉴之处:http://blog.sina.com.cn/s/blog_4ad7c2540102uzkc.html
相关推荐
总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...
通过以上两种方式,我们不仅能够灵活地进行多表联合查询,还可以有效地将查询结果映射到Java对象中。这对于提高代码的可读性和维护性非常有帮助。 总之,Hibernate提供了一系列强大的工具和技术,可以帮助开发者...
本项目"Spring+Hibernate实现用户登录"旨在演示如何整合这两个框架,构建一个能够处理用户登录功能的Web应用程序。下面将详细介绍这个项目涉及的关键知识点。 1. **Spring框架**:Spring是一个全面的Java应用开发...
本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...
在Hibernate中,处理多对多关系需要定义两个实体类,每个实体类对应一个表,并在其中一个或两个实体类中声明`@ManyToMany`注解。这个注解用于表示两个实体之间的多对多关联。例如,我们有`Student`和`Course`两个类...
总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...
**标题解析:**“hibernate实现数据库表的多种关系” 在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。本示例着重于如何利用Hibernate来实现不同...
在"JSP+Hibernate实现留言板"的项目中,JSP文件主要负责接收用户输入,显示留言列表,以及处理提交的留言。例如,一个简单的JSP页面可能包含一个表单让用户输入姓名和留言内容,然后通过POST请求提交到服务器。...
本篇将深入探讨Hibernate中的分页查询功能以及它如何处理数据库连接,帮助你更有效地管理大数据量的查询操作。 首先,我们来看一下什么是分页查询。在Web应用中,当用户需要浏览大量数据时,一次性加载所有数据不仅...
总的来说,Hibernate的`Criteria`、`Query`以及QBC(Query By Criteria)提供了灵活且强大的查询手段,它们不仅支持基本的单表查询,还能处理复杂的联表、分页、参数绑定和统计需求,是Java开发者进行数据库操作的...
“Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...
**Hibernate实现原理模拟** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际...
6. **源码分析**:为了更好地理解这一过程,你可以查看Hibernate源码,了解它如何处理多对多关联的SQL语句生成、中间表的操作以及事务管理。这有助于提高对Hibernate框架的理解。 通过以上步骤,我们可以在...
在这个特定的例子中,我们关注的是如何在Hibernate中实现自连接查询,以处理Oracle数据库中EMP表的树状结构问题。 首先,自连接查询是指一个表与自身进行连接的操作,常用于处理具有层级关系的数据,例如员工的上...
在Hibernate中,这种关系需要通过中间表(也称为关联表或连接表)来实现,它通常包含两个外键,分别引用两个参与关联的实体。 二、配置多对多关联 1. 实体类标注 在Java实体类中,我们需要使用`@ManyToMany`注解来...
Hibernate作为一款优秀的ORM框架,提供了多种方式来处理多表查询,简化了这一过程,使开发者能够以更面向对象的方式进行数据操作。 ### 多表查询的实现方式 #### 1. 使用HQL(Hibernate Query Language) HQL是一...
- 可以通过子句实现对多个表的联合查询。 - 示例:查询学生及其所在班级的信息。 ```java String hql = "select s.stuId, s.stuName, b.banjiName from Student s, Banji b where s.banji.banjiId = b.banjiId";...
8. **结果处理**:查询结果通常会被转化为Model对象,然后由Struts2的Result返回给前端页面展示。 9. **页面展示**:创建JSP或FreeMarker模板,使用Struts2的标签库来展示从Action传递过来的数据。 在提供的压缩包...
通过本文的介绍,我们不仅回顾了数据库表连接的基础知识,还深入了解了Hibernate HQL关联查询的实现原理及应用方法。对于开发者而言,掌握HQL关联查询不仅可以提高查询效率,还能让代码更加简洁易懂。希望本文能帮助...
综上所述,"struts2+hibernate实现登录及增删改操作"涉及到的是如何利用这两个框架构建一个完整的Java Web应用,包括用户身份验证、数据库操作以及对数据的增删改等核心功能。这个小案例可以帮助开发者理解并熟练...