Hibernate中的多表查询及抓取策略

所属分类: 软件编程 / java 阅读数: 28
收藏 0 赞 0 分享

1.Hibernate中的多表查询

 1.1SQL中的多表查询

【交叉连接】

select * from A,B;

【内连接】

显示内连接:inner join(inner 可以省略)

Select * from A inner join B on 条件;

隐式内连接:

Select * from A,B where 条件;

【外连接】

左外连接:left outer join

Select * from A left outer join B on 条件;

右外连接:right outer join

Select * from A right outer join B on 条件;

1.2Hibernate中的多表连接查询

【交叉连接】

交叉连接

【内连接】

显示内连接 from Customer c inner join c.linkmans

隐式内连接

迫切内连接from Customer c inner join fetch c.linkmans

【外连接】

左外连接

右外连接

迫切左外连接

2.Hibernate中的抓取策略

2.1 延迟加载lazy

lazy延迟加载: 查询的时候不发送sql语句,在使用对象的时候才发送sql语句查询

延迟加载氛围类级别的延迟加载和关联级别的延迟加载

2.1.1类级别的延迟加载

使用延迟加载的方法查询某个类的时候是否采用的延迟称为是类级别的延迟。默认值是true。

Customer customer = session.load(Customer.class,1l);// 默认就会采用延迟加载,这种称为是类级别的延迟。 

类级别延迟加载失效:

* final修饰这个类,不能产生代理类,延迟加载就会失效。

* 在<class>上配置lazy=”false”

2.1.2关联级别的延迟加载

查询到某个对象以后,获得其关联的对象。查询其关联对象的时候是否采用的延迟。称为是关联级别的延迟。

Customer c = session.get(Customer.class,1l);
c.getLinkMans(); // 查询关联对象的时候,是否采用延迟加载。

关联级别的延迟往往会与抓取策略一起使用,优化程序。(关联级别的延迟在<set>或者是<many-to-one>标签上的延迟加载)

2.2抓取策略

抓取策略指的是查找到某个对象后,抓取其关联的对象的时候采用的策略。抓取策略就是在关联对象的配置上(<set>和<many-to-one>)配置fetch属性。

2.2.1 在set上配置的lazy和fetch

fetch:抓取策略,控制SQL语句的发送的格式。

    * select    :默认值。发送一条select语句查询关联对象。

    * join  :发送一条迫切左外连接查询关联对象。

    * subselect :发送一条子查询查询关联对象。

lazy:延迟加载,控制SQL语句的发送的时候。

    * true  :默认值。采用延迟加载。

    * false :不采用延迟加载。

    * extra :及其懒惰。

2.2.2 在many-to-one上配置的lazy和fetch

fetch:抓取策略,控制SQL语句的发送的格式。

    * select    :默认值.发送一条select语句查询关联对象。

    * join  :发送一条迫切左外连接查询关联对象。

lazy:延迟加载,控制SQL的发送的时机。

    * proxy :默认值。是否采用延迟,需要由另一方类上的延迟加载来决定。

    * false :不采用延迟加载。

    * no-proxy:

2.2.3 批量抓取

  批量抓取:查询了多个客户的时候,查询多个客户下的所有联系人。

  在Customer.hbm.xml中<set>上配置batch-size=”n”

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

更多精彩内容其他人还在看

Java的面向对象编程基本概念学习笔记整理

这篇文章主要介绍了Java的面向对象编程基本概念学习笔记整理,包括类与方法以及多态等支持面向对象语言中的重要特点,需要的朋友可以参考下
收藏 0 赞 0 分享

Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法

这篇文章主要介绍了Eclipse下编写java程序突然不会自动生成R.java文件和包的解决办法 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

基于Java实现杨辉三角 LeetCode Pascal's Triangle

这篇文章主要介绍了基于Java实现杨辉三角 LeetCode Pascal's Triangle的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中Spring获取bean方法小结

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,如何在程序中获取Spring配置的bean呢?下面通过本文给大家介绍Java中Spring获取bean方法小结,对spring获取bean方法相关知识感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

如何计算Java对象占用了多少空间?

在Java中没有sizeof运算符,所以没办法知道一个对象到底占用了多大的空间,但是在分配对象的时候会有一些基本的规则,我们根据这些规则大致能判断出来对象大小,需要的朋友可以参考下
收藏 0 赞 0 分享

剖析Java中的事件处理与异常处理机制

这篇文章主要介绍了Java中的事件处理与异常处理机制,讲解Java是如何对事件或者异常作出响应以及定义异常的一些方法,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Java的Struts2框架的结构及其数据转移方式

这篇文章主要介绍了详解Java的Struts2框架的结构及其数据转移方式,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
收藏 0 赞 0 分享

Java封装好的mail包发送电子邮件的类

本文给大家分享了2个java封装好的mail包发送电子邮件的类,并附上使用方法,小伙伴们可以根据自己的需求自由选择。
收藏 0 赞 0 分享

在Java的Struts中判断是否调用AJAX及用拦截器对其优化

这篇文章主要介绍了在Java的Struts中判断是否调用AJAX及用拦截器对其优化的方法,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下
收藏 0 赞 0 分享

java多线程Future和Callable类示例分享

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。今天我们就来研究下Future和Callab
收藏 0 赞 0 分享
查看更多