Hibernat的get()和load()方法的区别

Hibernat的get()和load()方法的区别

get()方法是立即查询

load()方法是延迟查询,Person person = (Person)session.load(Person.class,1);这句话其实没有去查找数据库,只是返回了一个代理。当真正需要的时候才去查找数据库比如输出System.out.println(p.getName());这个时候才发出查找数据库,所以load()方法是延迟查询。如果输出的 是ID也不会发出查询语句,因为Person person = (Person)session.load(Person.class,1)这句话已经指定是那条数据了。好处是:对象很大的时候可以用load,当数据很小的时候不适应用load方法。当load()方法查询的id不存在的时候会报ObjectNotFoundException异常。get方法查询的id不存在不会报错返回null.

也可以在映射文件中配置使用lazy 让load方法变成立即查询。

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- 本文件就是一个java对象到关系数据库的映射配置文件 -->

-<hibernate-mapping package="bean">

<!-- class 配置 类 对应表的映射配置 name 表示类名 table 表示关系数据库中的表名 -->



-<class table="t_person" name="Person" lazy = "false">

<!-- id 指定Person类中那个属性是Id -->



-<id name="id">

<!-- id生成策略 -->


<generator class="native"/>

</id>

<!-- Person类的其他属性配置 name 对应 类的属性 column 对应表的字段名(如果没有设置column将使用name的值创建对应的列名) -->


<property name="name" column="t_name"/>

<property name="password" column="t_pass"/>

<!-- type 表示指定属性 对应的hibernate类型 date 2013-02-17 time 17:02:28 timestamp 2013-02-17 17:03:07 默认 -->


<property name="birthday" type="timestamp"/>

</class>

</hibernate-mapping>

 

posted on 2014-12-21 20:59  aicpcode  阅读(169)  评论(0编辑  收藏  举报

导航