hibernate吧 关注:2,522贴子:3,001
  • 2回复贴,共1

hibernate load(id) 方法的到是空值

只看楼主收藏回复

问一个问题啊:hibernate load(id) 方法的到是空值,网上看到一个答案:get返回的实体对象,load返回的是代理的对象而已.
那么 是这样吗?问题怎么解决呢?
public Object load(String entityName, Serializable id) throws HibernateException {
820 LoadEvent event = new LoadEvent(id, entityName, false, this);
821 boolean success = false;
822 try {
823 fireLoad( event, LoadEventListener.LOAD );
824 if ( event.getResult() == null ) {
825 getFactory().getEntityNotFoundDelegate().handleEntityNotFound( entityName, id );
826 }
827 success = true;
828 return event.getResult();
829 }
830 finally {
831 afterOperation(success);
832 }
833 }
private void fireLoad(LoadEvent event, LoadType loadType) {
902 errorIfClosed();
903 checkTransactionSynchStatus();
904 LoadEventListener[] loadEventListener = listeners.getLoadEventListeners();
905 for ( int i = 0; i < loadEventListener.length; i++ ) {
906 loadEventListener[i].onLoad(event, loadType);
907 }
908 }
看了下源码,但是后面的看不懂了


1楼2014-01-09 11:51回复
    通过Session.load()实现懒加载
    load(Object, Serializable):根据id查询 。查询返回的是代理对象,不会立刻访问数据库,是懒加载的。当真正去使用对象的时候才会访问数据库。
    用load()的时候会发现不会打印出查询语句,而使用get()的时候会打印出查询语句。
    使用load()时如果在session关闭之后再查询此对象,会报异常:could not initialize proxy - no Session。处理办法:在session关闭之前初始化一下查询出来的对象:Hibernate.initialize(user);
    使用load()可以提高效率,因为刚开始的时候并没有查询数据库。但很少使用。


    2楼2014-01-09 11:54
    回复