一、HQL的一对多查询

班级(1)->(多)学生

/**
* 实现Classes与Student的内连接
*
* SELECT c.*,s.*
* from classes c INNER JOIN student s
* where (c.cid=s.cid)
*/
@Test
public void testInnerJoin(){
session = HibernateUtils.openSession(); Query query = session.createQuery("from Classes c " +
"inner join c.students s ");
List list = query.list();//Object[]
session.close();
} /**
* 迫切内连接
*/
@Test
public void testInnerJoin_fetch(){
session = HibernateUtils.openSession(); Query query = session.createQuery("from Classes c " +
"inner join fetch c.students s ");
List list = query.list();//Classes
session.close();
} /**
* 左外连接
* SELECT c.*,s.*
* from classes c LEFT OUTER JOIN student s
* on(s.cid=c.cid)
*/
@Test
public void testLeftOutJoin(){
session = HibernateUtils.openSession(); Query query = session.createQuery("from Classes c " +
"left outer join c.students s ");
List list = query.list();//Object[]
session.close();
}
/**
* 迫切左外连接
*
*/
@Test
public void testLeftOutJoin_fetch(){
session = HibernateUtils.openSession(); Query query = session.createQuery("from Classes c " +
"left outer join fetch c.students s ");
List list = query.list();//Classes
session.close();
} /**
* 要查询的属性来自两个持久化类
* 注意:带构造函数的查询不能 与 带fetch的查询同一时候存在
* 使用 fetch:是希望带Classes
*
*/
@Test
public void testQueryPropertyFromTwo(){
session = HibernateUtils.openSession();
List<ClassStuView> classStuViews = session.createQuery("select new cn.cil.domain.ClassStuView(c.name,s.name) " +
" from Classes c inner join c.students s").list();
session.close();
}

二、HQL的多对多查询

学生(多)->(多)课程

/**
* 迫切内连接
*
*/
@Test
public void testInnerJoin_Fetch(){
Session session = sessionFactory.openSession();
session.createQuery("from Student s inner join fetch s.courses c").list();
session.close();
} /**
* 迫切左外连接
*/
@Test
public void testLeftOuterJoin_Fetch(){
Session session = sessionFactory.openSession();
session.createQuery("from Student s left outer join fetch s.courses c").list();
session.close();
}

三、一对多与多对多结合

班级(1)->(多)学生->(多)课程

/**
* 查询全部的班级的全部的学生的全部的课程
*/
@Test
public void testQuery1(){
Session session = HibernateUtils.openSession();
List<Classes> classes = session.createQuery("from Classes c inner join " +
"fetch c.students s inner join " +
"fetch s.courses cc").list();
session.close();
} @Test
public void testQuery2(){
Session session = HibernateUtils.openSession();
List<Student> classes = session.createQuery("from Student s inner join fetch s.classes c inner join fetch s.courses cc").list();
session.close();
}

有用场景:

用户登录系统,推断该用户所拥有的权限。并进行显示权限范围内的菜单

依据username查用户依据用户查角色再依据角色查权限

createQuery("from Privilege p inner join fetch p.roles r inner join fetch r.users u where u.username=?")

当表与表之间的关系过于复杂的时候,就不能使用hibernate了,hql的书写会相当相当麻烦,能够採用视图来解决这一问题。使用JDBC拼SQL

Hibernate学习笔记(十) — HQL查询的更多相关文章

  1. HIbernate学习笔记5 之 查询

    一.HQL查询 * 按条件查询,条件中写的是属性名,之后在query对象为添加赋值,如: String hql = " from User where uid=?"; Sessio ...

  2. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  3. J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())

    J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())   当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...

  4. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  5. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  6. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  7. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  8. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(十) indigo Gazebo rviz slam navigation

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 moveit是书的最后一章,由于对机械臂完全不知,看不懂 ...

随机推荐

  1. IIS Express并发数设置

    今天将之前的一个瓦片图的服务迁移到了asp.net core试了一下,使用的时候感觉客户端刷新时有些慢,估计是并发连接数限制的原因. 由于这是一个开发中的版本,是用IIS Express部署的,IIS ...

  2. POJ 3580 SuperMemo (splay tree)

    SuperMemo Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6841   Accepted: 2268 Case Ti ...

  3. Get started with IDA and disassembly SH7058

    http://www.romraider.com/forum/viewtopic.php?f=25&t=6303 All of the 16-bit guidance in the follo ...

  4. 分布式中使用redis进行session共享

    摘要 在asp.net web中,session经常用来存储当前用户信息,或者通过session进行登录权限的验证.如果是一台服务器,session的使用没问题,如果使用nginx等实现反向代理,将站 ...

  5. VS2010发布网站

  6. 用最简单的例子理解观察者模式(Observer Pattern)

    假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户. 把通知这个动作抽象成一个接口. public interface IService { void Notif(); } 客户如果想获得通 ...

  7. jQuery操作字符串

    var str = "我有一头小毛驴,我从来也不骑";   1.打印出某索引位置上的字符 //结果:毛 alert(str.charAt(5));   2.打印出某索引位置上的Un ...

  8. 使用 Reachability 获取网络状态

    Reachability source https://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Int ...

  9. 关于mysql的wait_timeout参数 设置不生效的问题

    关于wait_timeout 有一次去online set wait_timeout 的时候发现改了不生效,如下: mysql> show variables like 'wait_timeou ...

  10. 卷积神经网络用于视觉识别Convolutional Neural Networks for Visual Recognition

    Table of Contents: Architecture Overview ConvNet Layers Convolutional Layer Pooling Layer Normalizat ...