当应用程序须要在关联关系间进行导航的时候.hibernate怎样获取关联对象的策略. 抓取策略的方式: FetchType.LAZY:懒载入.载入一个实体时.定义懒载入的属性不会立即从数据库中载入. FetchType.EAGER:急载入,载入一个实体时,定义急载入的属性会马上从数据库中载入. 在项目中的体现.我这里有两个实体.一个放基础数据的实体.还有一个是放操作记录的实体. 这两个实体的关系是一对一关系,因此要把基础数据中的主键放在操作记录中作为外键.查询的时候查询操作记录表顺便把基础表相关…
延迟加载的概述 什么是延迟加载 延迟加载:lazy(懒加载).执行到该行代码的时候,不会发送语句去进行查询,在真正使用这个对象的属性的时候才会发送SQL语句进行查询. 延迟加载的分类 l  类级别的延迟加载 n  指的是通过load方法查询某个对象的时候,是否采用延迟.session.load(Customer.class,1l); n  类级别延迟加载通过<class>上的lazy进行配置,如果让lazy失效 u  将lazy设置为false u  将持久化类使用final修饰 u  Hib…
面试:Hibernate效率很低,如何优化? 缓存怎么弄的,语句怎么优化? 聊聊一级缓存,聊聊抓取策略和延迟加载,聊聊批量抓取 延迟加载: 一般不单独使用,和延迟加载一起使用 延迟加载:lazy(懒加载) 执行到该行代码的时候不会发送语句,真正使用这个对象的属性的时候才会发送sql语句进行查询. 类级别延迟加载:指的是是通过load方法查询某个对象的时候是否采用延迟,通过class标签上的lazy来配置. 让类级别延迟加载失效:1 lazy设为false 2 final修饰 3 调用Hibern…
时间:2017-1-23 19:08 --区分延迟和立即检索1.立即检索    当执行某行代码时,会马上发出SQL语句进行查询.    例如:get()2.延迟检索    当执行某行代码时,不会马上发出SQL语句,只有当真正使用对象时,才会向数据库发出SQL语句.    例如:load()3.示例代码    /*      * 区分立即检索和延迟检索      */     public void fun1(){         Session session = HibernateUtils.…
立即检索:当执行某行代码的时候,马上发出SQL语句进行查询(get())延迟检索:当执行某行代码的时候,不会马上发出SQL语句进行查询.当真正使用这个对象的时候才会发送SQL语句(load()) 类级别检索和关联级别检索 类级别的检索:<class>标签上配置lazy 关联级别的检索:<set>/<many-to-one>上面的lazy 从一的一方关联多的一方(<set>) fetch:控制sql语句的类型 join :发送迫切左外连接的SQL查询关联对象.…
一.区分延迟和立即检索 二.类级别检索和关联级别检索 一.区分延迟和立即检索 立即检索: 当执行某行代码的时候,马上发出SQL语句进行查询. get() 延迟检索: 当执行某行代码的时候,不会马上发出SQL语句进行查询.当真正使用这个对象的时候才会发送SQL语句. load(); 二.类级别检索和关联级别检索 类级别的检索: <class>标签上配置lazy 关联级别的检索: /上面的lazy. 查询某个对象的时候,是否需要查询关联对象? 查询关联对象的时候是否采用延迟检索? 从一的一方关联多…
在上一篇博客中,介绍了Hibernate的缓存机制.合理的配置缓存,可以极大程度上优化Hibernate的性能.这篇博客,介绍另外一个调优方式:抓取策略. 一.什么是抓取策略 抓取策略(fetching strategy):当应用程序需要在关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O / R映射的元数据中声明,也可以在特定的HQL或条件查询(Criteria Query)中重载声明. 二.Hibernate的抓取策略 在Hibernate中,主要包括四种抓…
目录 1. Hibernate的查询方式 1.1 方式一:OID查询 1.2 方式二:对象导航查询 1.3 方式三:HQL方式 1.4 方式四:QBC查询 1.5 方式五:SQL查询 2. 环境搭建 3. HQL查询 3.1 简单查询 3.2 别名查询 3.3 排序查询 3.4 条件查询 3.4 投影查询 3.5 分页查询 3.6 分组统计查询 3.7 HQL的多表查询 3.7.1 SQL的多表查询 3.7.2 HQL的多表查询 4. QBC查询 4.1 简单查询 4.2 排序查询 4.3 分页…
抓取策略: 抓取策略是当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.Hibernate的抓取策略是Hibernate提升性能的一种手段,可以在获取关联对象的时候,对发送的语句进行优化,但是往往抓取策略需要和延迟加载一起使用来提升性能. 延迟加载的分类: 延迟加载(lazy load)是(也称为懒加载)Hibernate关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要…
抓取策略: 为了改变SQL语句执行的方式 当应用程序需要在Hibernate实体对象的关联关系间进行导航的时候,Hibernate如何获取关联对象的策略 抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL或Criteria Query中重载声明 Hibernate的抓取策略只影响get | load方法,对HQL是不影响的 参考链接:http://www.cnblogs.com/crazylqy/p/4081459.html select fetching: 默认执行多条sql语句 可…
package cn.itcast.test; import java.util.List; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import cn.itcast.utils.HibernateUtils; import cn.itcast.vo.Customer; import cn.itcas…
package cn.itcast.test; import java.util.List; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import cn.itcast.utils.HibernateUtils; import cn.itcast.vo.Customer; import cn.itcas…
你在做查询的时候它可以帮你关联出它的一些相应的关联对象.那么它关联这个对象的时候是在什么时候发送的这些语句以及它是如何把这些数据拿出来的? 知道延迟检索是怎么回事了,而且它也能够产生这个代理对象.当你用这个代理对象的某个属性的时候它才会初始化.那么代理对象由谁来生成呢?由E:\北风网\hibernate_day03\WebRoot\WEB-INF\lib\javassist-3.12.0.GA.jar这个jar包来生成. 关联级别的检索策略: package cn.itcast.test; im…
一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取对象的关联对象或者关联集合. (2)查询抓取(select Fetch):这种抓取方式会另外发送一条select语句抓取当前对象的关联实体或者集合.除非指定lazy=false,否则只有在真正访问关联关系的时候才会执行第二条select语句. (3)子查询抓取(subselect Fetch):另外…
懒载入(Load On Demand)是一种独特而又强大的数据获取方法,它可以在用户滚动页面的时候自己主动获取很多其它的数据,而新得到的数据不会影响原有数据的显示,同一时候最大程度上降低server端的资源耗用.总结一句话:什么时候须要数据.什么时候载入. 一.懒载入 1.1 类的懒载入 由javassist产生的代理类与Classes类是继承关系. session.load()方法产生的是代理对象,该代理类是持久化类的子类 /** * 类的懒载入 */ @Test public void te…
1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // 基于标准的 sql 语句查询 String sql = "select * from t_person"; // 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类 SQLQuery query = session.createSQLQue…
1.抓取策略 在前面说到的关联关系注解中,都有一个fetch属性,@OneToOne.@ManyToOne中都默认是FetchType.EAGER,立即获取.@OneToMany.@ManyToMany默认值是FetchType.LAZY,延迟获取.这些注解的的fetch属性定义的是合适获取,至于如何获取,对与FetchType.EAGER,使用的是JOIN.FetchType.LAZY使用的是SELECT.JPA并没有提供我们设置如何获取的方式,如果想要进行修改要使用Hibernate提供的F…
假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=HibernateUtil.getSession(); Book book =(Book) session.get(Book.class,2); System.out.println(book.getName()); 当执行完第二行代码,还未执行第三行时,控制台已经打印出了sql语句,执行第三行时打印…
原文 :http://4045060.blog.51cto.com/4035060/1088025 部分参考:http://www.cnblogs.com/rongxh7/archive/2010/05/12/1733088.html Hibernate3 定义了如下几种抓取策略: 连接抓取(Join fetching) - Hibernate通过 在SELECT语句使用OUTER JOIN (外连接)来 获得对象的关联实例或者关联集合. 查询抓取(Select fetching) - 另外发送…
一,延迟加载 1.实体类延迟加载 通过代理机制完成,由javassist类库实现运行时代理,修改实体类的字节码实现了运行时代理     <class lazy="true|false">     实体级别的延迟加载默认值为true,意味实体对象是延迟加载,只影响load方法.      <class lazy="true|false">其他查询方式都是立即加载              2.关联属性延迟加载 默认情况下除了<one-to…
抓取策略(fetching strategies)是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL或条件查询(CriteriaQuery)中重载声明. 在这里我们还是创建categroy与book的关联关系. 在Hibernate中定义了如下几种抓取策略: ①.连接抓取(Join fatching)- Hibernate通过在select语句中使用outer j…
1.detached在抓取策略为 jion显式左外连接查询情况下 会产生笛卡儿积现象 DetachedCriteria dc = DetachedCriteria.forClass(Topic.class); dc.add(Restrictions.like("title", "%%")); Criteria criteria = dc.getExecutableCriteria(session); criteria.setFirstResult((currentp…
一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象. 相对于load的延迟加载方式,get就直接的多,当我们使用session…
一.延迟加载 1.简单查询get,load 针对对象本身延迟或即时 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出sql语句,当前得到的这个对象其实是一个代理对象,这个代理对象只保存了实体对象的id值,只有当我们要使用这个对象,得到其它属性时,这个时候才会发出sql语句,从数据库中去查询我们的对象. 相对于load的延迟加载方式,get就直接的多,当我们使用session…
1.加载策略:指hibernate查询数据时,采用什么样的方式将数据写入内存.Hibernate中提供了两种方式来加载数据:懒加载和即时加载. 2.懒加载又称延迟加载,指使用hiberante API查询数据时,不会立即将数据写入内存.而是等到真正使用数据时才会发出sql语句,到数据中查询数据. 3.即时加载:指使用hibernate API查询数据时,会立即发出sql语句,查询数据.并将数据写入内存. 4.get方法是采用的即时加载,如果数据不存在,返回 null ,:load方法采用的懒加载…
抓取策略(fetching strategy) 是指:当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候, Hibernate如何获取关联对象的策略.抓取策略可以在O/R映射的元数据中声明,也可以在特定的HQL 或条件查询(Criteria Query)中重载声明. 通过配置抓取策略可以直接影响Session的get()和load()方法的查询效率 Hibernate3 定义了如下几种抓取策略:     * 连接抓取(Join fetching) - Hibernate通…
fetch 抓取策略 前提条件:必须是一个对象操作其关联对象. 1. 根据一的一方加载多的一方,在一的一方集合中,有三个值:join/select/subselect 2.根据多的一方加载一的一方, 这种情况不考虑,因为关联对象就一个数据,怎么样都可以join 连接  [一次性的把两张表的数据全部查询出来,只发出一条sql语句]    *  在页面上既包括一的一方的数据,又包括多的一方的数据    *  数据库的数据量比较小select 默认的查询方式    [先加载classes,当得到stu…
实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置batch-size,hibernate将会减少SQL语句的数量. Hibernate可以充分有效的使用批量抓取,也就是说,如果仅一个访问代理(或集合),那么hibernate将不载入其他未实例化代理.批量抓取是延迟查询抓取的优化方案,你可以在两种批量抓取方案之间进行选择:在类级别和集合级别. 类/实体…
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 jo…
最近在研究 Hibernate 的性能优化的时候碰到了"抓取策略", 由于以前没有详细的研究过, 所以到处找资料, 但是无论从一些讲 Hibernate 书籍,还是他人 Blog 中都没有找到详细 介绍 Hibernate 文档中所说的原汁原味的抓取策略, 综合懒加载等等特性混在了一起, 所 以在这自己在借鉴了他人的基础上研究了下原汁原味的 Hibernate 四种"抓取策略"; 连 接抓取(Join fetching) - Hibernate通过 在SELECT语…