Hibernate_懒加载特性

来源:互联网 发布:决策树算法例题经典 编辑:程序博客网 时间:2024/06/05 14:08
extra策略:与lazy="true"类似。主要区别是增强延迟检策略能进一步延迟Customer对象的orders集合代理实例的初始化时机:当程序第一次访问orders属性的iterator()方法时,会导致orders集合代理类实例的初始化当程序第一次访问order属性size(),contains()和isEmpty()方法时,Hibernate不会初始化orders集合类的实例,仅通过特定的select语句查询必要的信息,不会检索所有的Order懒加载:也叫延迟加载,不是在执行获取操作时马上生成SQL,而是在第一次使用时生成SQL.分成两种:类组级别:<class ... lazy="true/false">属性级别:<set/list/map/bag ... lazy="..."><man-to-ont ... lazy="..."><one-to-ont ... lazy="...">在使用懒加载特性时,可能会有LazyInitializationException异常:原因:真正的支获取数据时,Session已经没有了。解决办法:方式一:让Session在真正加载后再关闭方式二:或是在Session关闭前执行Hibernate.initialize(department.getEmployee());// 立即加载指定的懒加载对象


<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- 导入包 --><hibernate-mapping package="cn.itcast.f_hbm_oneToMany"><!-- 类名 --><class name="Department" table="department"><id name="id" type="integer" column="id_"><generator class="native" /></id><property name="name" type="string" column="name_" /><!-- employee属性,Set集合,表达的是本类与Employee的一对多关系 class属性:关联的实体类型key子元素:对方表中的外键列(多方的那个表)inverse属性:默认为false,表示本方维护关联关系。如果为true,表示本方不维护关联关系。只是影响是否能设置外键的值(设成有效值或者是null值),对获取信息没有影响cascade属性:默认为none,代表不级联。级联是指操作主对象时,对关联的对象也做相同的操作可设为:delete,save-update,all,none ...lazy属性:懒加载,默认为true。true:懒加载,在张一次使用时加载。false:立即加载,在获取本对象时就加载这个集合的所有元素。extra:增强的懒加载策略--><set name="employee" cascade="all" lazy="true"><key column="departmentId" /><one-to-many class="Employee" /></set></class></hibernate-mapping>

@Testpublic void testLazy() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;Department department = null;try {tx = session.beginTransaction();// ------------------------------------department = (Department) session.get(Department.class, 1);System.out.println(department);// System.out.println(department.getEmployee().size());Hibernate.initialize(department.getEmployee());// 立即加载指定的懒加载对象// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}// 在使用懒加载特性时,要注意LazyInitializationException异常System.out.println(department.getEmployee());}

在授权时需要立即加载,平时延迟加载

0 0
原创粉丝点击