`
jhlcss
  • 浏览: 41855 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
最近访客 更多访客>>
社区版块
存档分类
最新评论

多表关联查询的一个HQL例子

阅读更多
本人是新手,刚刚接触hibernate不到2个星期,可能在很多人眼里这是一个非常简单的语句,可是他浪费了我1天的时间,希望对新手有所帮助。
这是一个根据登录人员ID取相应菜单的语句,权限取人员和角色权限的合集。

人员表:SysUser
字段:UserCode,UserName
机构表:SysOrganization
字段:OrgCode,OrgName
菜单表:SysMenu
字段:MenuID,MenuName,FuncID
角色表:SysRole
字段:RoleCode,RoleName
功能表:SysFunction
字段:FuncID,FuncName
人员角色关联表:O_Role_User
字段:oid,RoleCode,UserCode
人员功能关联表:O_Func_User
字段:oid,FuncID,UserID
角色功能关联表:O_Func_Role
字段:oid,FuncID,RoleID

人员和角色跟功能关联,功能跟菜单关联
对应的SQL语句应该是:
select * from Sys_Menu a
where func_id in
(select func_id from o_func_user where user_code=2000000000)
or func_id in(
select func_id from o_func_role a 
left join o_role_user b on a.role_code = b.role_code
where b.user_code=2000000000
)

对应的字段不太一样,但是可以看明白。

对应的HQL是:


String queryString = "select sysmenu from SysMenu sysmenu "
				+ "inner join sysmenu.sysFunction func where func.funcId in "
				+ "(select func.funcId from OFuncUser fu "
				+ "left join fu.sysFunction func "
				+ "left join fu.sysUser su where su.userCode=2000000000) "
				+ "or func.funcId in "
				+ "(select func.funcId from OFuncRole fr "
				+ "left join fr.sysFunction func "
				+ "left join fr.sysRole sr "
				+ "left join sr.ORoleUsers ru "
				+ "left join ru.sysUser su "
				+ "where su.userCode=2000000000)";


相信有更简单方便的方法。
分享到:
评论
1 楼 laiseeme 2007-05-30  
好长啊

相关推荐

    hibernateHQL关联查询

    在实际开发中,HQL关联查询的应用场景非常广泛,特别是在需要跨多个实体进行数据检索的情况下。例如,在电子商务系统中,我们需要获取用户信息及其相关的订单信息时,就可以利用HQL关联查询来简化这一过程。此外,当...

    HQL多对多的查询语句分析

    例如,对于学生和课程的例子,可能存在一个`StudentCourse`联合表,包含`student_id`和`course_id`两个字段。 描述中提到的链接"**https://tanjunxiaoge.iteye.com/blog/1750865**"可能详细解释了如何构建和执行...

    hibernate多表联合查询

    本文将详细介绍如何利用Hibernate进行多表联合查询,并通过一个具体的例子来展示其强大功能。 #### 二、多表联合查询概述 多表联合查询是指在一个查询语句中同时从两个或两个以上的表中获取数据。在关系型数据库中...

    Hibernate-HQL语句多对多写法

    "Hibernate-HQL语句多对多写法" ...5. 在多对多关系的情况下,需要使用中间表来存储关联关系。 总结来说,Hibernate 的 HQL 语言提供了强大的查询功能,可以方便地检索和操作数据,特别是在多对多关系的情况下。

    HQL的几钟常见写法

    这是一个比较复杂的查询例子,涉及到了多个实体类之间的关联。这里使用了多次左连接来获取`Project`实体的多个关联实体的信息。具体来说: - `left join p.currentProjectDetail pd`表示关联`currentProjectDetail`...

    精通HQL(word格式)

    在这个例子中,使用了一个名为joblog的数据库,包含三个表:student(学生表),course(课程表)和sc(选课表)。每个表都有相应的Java持久化类,例如Student、Course和SC,分别对应学生的数据模型、课程的数据模型...

    HQL初级出门增删查找例子

    HQL(Hibernate Query Language)是Hibernate提供的一个面向对象的查询语言,它类似于SQL,但更加面向对象,能够与Hibernate的实体类进行交互。 标题“HQL初级出门增删查找例子”指的是这个压缩包包含了一些基础的...

    HQL详解

    HQL是SQL的一个面向对象的版本,提供了更为简洁且强大的查询机制,尤其是在处理复杂的关联查询时。 ### HQL基本语法 HQL的语句结构与SQL类似,但对象化了。例如,你可以通过类名而不是表名来查询数据: ```sql ...

    精通hibernate HQL语言

    HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是直接操作数据库表。HQL是Hibernate官方推荐的检索数据的主要方式...

    Hibernate hql查询

    以下是一个简单的例子: ```java Criteria criteria = session.createCriteria(Customer.class); criteria.add(Restrictions.eq("name", "John")); List<Customer> customers = criteria.list(); ``` Criteria API...

    Hibernate多表查询.txt

    在示例中提到的`NewMembers`类就是一个例子,通过`"select new NewMembers(members, classInfo.className)"`这样的HQL语句,可以将查询结果直接映射到这个类的实例上,使得数据处理更为直观和高效。 ### 实践要点与...

    Spring Data JPA 实现多表关联查询的示例代码

    在Spring Data JPA中,多表关联查询是一个常见的需求,特别是在复杂的业务场景下。本文将主要探讨通过创建结果集接口的方式来实现多表关联查询的方法,而不是依赖Hibernate的级联查询。 首先,我们要了解Spring ...

    Hibernate HQL.txt

    这只是一个简单的例子,实际应用中可能会涉及更复杂的查询逻辑和数据处理。 总结来说,Hibernate HQL提供了一种强大的工具,让开发人员能够以面向对象的方式进行数据库查询,从而提高开发效率并简化代码结构。通过...

    用hibernate操作多表的例子

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式处理数据库操作,极大...实践是检验理论的最好方式,动手尝试这个多表操作的例子,将有助于巩固你的Hibernate知识。

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    hibernate多对多映射的例子

    在数据库设计中,多对多关系意味着一个表的记录可以对应另一个表中的多个记录,反之亦然。例如,学生和课程的关系就是一个典型的多对多关系:一个学生可以选择多门课程,一门课程也可以被多个学生选修。 在...

    hibernate通用查询

    Hibernate通用查询是Java开发中非常重要的一个概念,它极大地简化了数据库操作,使得开发者无需编写大量的SQL语句,即可实现复杂的数据查询。本知识点主要围绕Hibernate的通用查询功能展开,包括其基本原理、优势...

    hql语句[定义].pdf

    分组允许根据一个或多个属性对查询结果进行分类。配合`group by`子句和聚合函数可以实现更复杂的统计。例如: - `select o.status, count(o) from Order o group by o.status` 按照`Order`对象的状态进行分组,并...

    Hibernate 的第一个例子

    这只是一个起点,Hibernate的完整功能远不止这些,包括关联映射、缓存机制、性能优化等,都是值得深入研究的领域。继续学习和实践,你将能更好地掌握Hibernate,提高Java应用的数据库处理能力。

    SpringBoot多表联查(测试可用)

    在Spring Boot应用中,进行多表联查是一个常见的需求,特别是在数据处理和业务逻辑复杂的场景。Spring Data JPA,作为Spring Boot的一个重要组件,提供了一种便捷的方式来处理数据库的CRUD操作,包括多表联查。本文...

Global site tag (gtag.js) - Google Analytics