Hibernate 中 load 方法简介

接触过 Hibernate 的朋友都知道 Session 中的 get 方法,而对于 load 方法,能够深入了解的人便不是很多。其实,如果能正确地是用 load 方法,可以是你的应用更加有效率;但是,load 方法的使用又会带来一些错误。实际上,只要我们能正确了解 load 方法,就避免这些错误的发生。下面,我以问答的形式简单介绍一下 load 方法。

 

  1. load 方法的返回值是什么?
           这要分两种情况了。第一种情况,如果是 load 某个已在 Session 中存在的 Object,即你要 load 的 Object 已经是 Persistent 状态了。那么,load 方法返回的对象便是这个 Object 的引用。在这种情况下,load 和 get 的返回值是一样的。第二种情况,如果 Session 中没有你所要 load 的数据,那 load 方法将会返回一个 HibernateProxy。

  2. load 方法总是不 hit 数据库?那我怎么知道 load 的数据是否存在?
          如果是 load Session 中已有的数据,自然不需要 hit 数据库。如果所 load 的对象在 Session 中不存在,load 方法将返回一个 Proxy,这时也不 hit 数据库。当你要方法 Proxy 所代表的实体中的除主键外的属性的话,如果这个时候 Session 中还是没有相应的对象的话,Hibernate 就将 hit 数据库,并进行 Proxy 的初始化。如果数据库中没有相应的数据,load 便会抛出异常。这也是 load 方法与 get 方法不同的地方,在数据不存在的情况下,get 返回 null,而 load 则抛出异常。
  3. load 的方法都会抛出哪些异常?
          常见的由 load 引起的 Exception 有两种:ObjectNotFoundException 和 LazyInitializationException。前者是由于所 load 的数据在数据库中并不存在引起的。后者一般是由于 load 方法使用不正确造成的:得到由 load 返回的 Proxy 之后,在 Session 关闭的情况下 init Proxy 就会得到 LazyInitializationException。
          另外,在使用 load 设置引用属性值的时候,还可能出现违法外键约束的异常。简言之,只要确保你 load 数据是存在的,并且在 Proxy 初始化的时候保证 Session 是打开的就能避免这些 Exception 的出现。
  4. 什么时候使用 load 方法?
          简单说来,当你只想取得对数据库中一条记录的引用,而不是想的这条记录中的数据的时候(比如设置外键关系),就可以使用 load 而不是 get 方法。这样可以避免不必要的数据库访问。但是,使用 load 要格外小心,因为它比 get 方法更容易出问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值