1、当数据库不存在对应ID数据时,调用load()方法将会抛出ObjectNotFoundException异常,get()方法将返回null,我比较喜欢使用get()方法。2、当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,调用load()方法时则返回持久对象的代理类实例,此时的代理类实例是由运行时动态生成的类,该代理类实例包括原目标对象的所有属性和方法,该代理类实例的属性除了ID不为null外,所在属性为 null值,查看日志并没有Hibernate SQL输出,说明没有执行查询操作,当代理类实例通过getXXX()方法获取属性值时,Hiberante才真正执行数据库查询操作。当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,调用load()方法则是立即执行数据库并直接返回实体类,并不返回代理类。而调用get()方法时不管lazy为何值,都直接返回实体类。3、load()和get()都会先从Session缓存中查找,如果没有找到对应的对象,则查询Hibernate二级缓存,再找不到该对象,则发送一条SQL语句查询。对于load方法,有两个参数,即:load(entityClass, id)
1:entityClass是Bean。
2:id是干什么用的??哪来的??大侠给解释一下,没有搞明白。
load方法执行时,没有hql语句吗????还是hql语句写在什么地方啊??

解决方案 »

  1.   

    load(entityClass, id)

    get(entityClass, id)
    是一样的,区别在于load加载上来的对象是代理,当真正取load上来的数据(id除外)是才会发出sql语句,不是hql这样说明白?
      

  2.   

    load(entityClass, id)
    这里的id指是传入entityClass类对应的id
    当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,执行load方法时,就会有hql查询语句生成当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,执行load方法时,它会启用延迟加载,不会去查数据库,也就不会有hql查询语句生成
      

  3.   

    这里的id指是传入entityClass类对应的id??????能给个例子吗????
      

  4.   

    楼主 请参阅hibernate官方文档说明,写的相当详细了,哎!发现好多逛csdn的人从不查阅官方文档,有来论坛问问题的时间,早就在官方文档上找到答案了!
      

  5.   


    <class name="com.klzy.tnt.bean.host.Pif" table="pif" catalog="mydb">
      <id name="ifid" type="java.lang.Integer">
      <column name="ifid" />
      <generator class="assigned" />
      </id>
      <property name="idx" type="java.lang.Short">
      <column name="idx" />
      </property>
      <property name="piftypeid" type="java.lang.Integer">
      <column name="piftypeid" />
      </property>
      </class>
      

  6.   

    load(entityClass, id)
    这里的id指是传入entityClass类对应的id???这个id从哪来?
      

  7.   

    当然从数据库中来!load要到数据库中找Id来获取数据,而entityClass是告诉Hibernate将获得的对象封装成什么样的。
    楼主请参考Hibernate官方文档说明。自己动手丰衣足食!
      

  8.   

    Hibernate官方文档中没找到啊当然从数据库中来!load要到数据库中找Id来获取数据???数据库中的什么id啊???
      

  9.   

    没找到继续找啊!做软件开发的!连官方文档都不会找,那就没前途了!
    楼主你发的别的帖子还叫人讨论开发5年什么待遇!要是连官方文档都不会看!10年也是码农的待遇!
    增删改查的常规操作是先查出所有的数据到页面!(附带每行数据的id)!
    点击指定行数据将id带到后台进行数据库操作!
    你问的还那么理直气壮!
    你把逻辑思维理清晰点可否??????!!!!!!
      

  10.   

    数据库的什么ID!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    你说是什么Id???Id是什么概念?Id的英文全称是什么!数据库中的Id指什么??!!!楼主你该补的课程太多了!好好扎实的自己学学吧!这种问题问的太业余了!!!!!
    好歹Hibernate的映射文件里专门有特殊的标签来映射Id,你是怎么写的映射文件?或者就算用注解写你是怎么写的注解!
      

  11.   

    hibernate没搞多久,不明白地方比较多。
    你说的id是指主键了?就是hbm.xml文件里的id吧那load只能检索一条数据了?
      

  12.   

    专门上了hibernate的官网看了一眼这么好找的东西,你说找不到?!!!
    你发的这个帖子官网上有很好的解释!况且Hibernate官网已经提供了中文的文档!
    作为程序员有什么不好找的,这难道不是一个程序员应具有的自己解决问题的能力么?
    下面是我复制粘贴的部分内容!有那么难找么?!!!!!!
    11.3. 装载对象
    如果你知道某个实例的持久化标识(identifier),你就可以使用 Session 的 load() 方法来获取它。load() 的另一个参数是指定类的对象。本方法会创建指定类的持久化实例,并从数据库加载其数据(state)。 Cat fritz = (Cat) sess.load(Cat.class, generatedId);// you need to wrap primitive identifiers
    long id = 1234;
    DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );此外,你可以把数据(state)加载到指定的对象实例上(覆盖掉该实例原来的数据)。Cat cat = new DomesticCat();
    // load pk's state into cat
    sess.load( cat, new Long(pkId) );
    Set kittens = cat.getKittens();请注意如果没有匹配的数据库记录,load() 方法可能抛出无法恢复的异常(unrecoverable exception)。如果类的映射使用了代理(proxy),load() 方法会返回一个未初始化的代理,直到你调用该代理的某方法时才会去访问数据库。 若你希望在某对象中创建一个指向另一个对象的关联,又不想在从数据库中装载该对象时同时装载相关联的那个对象,那么这种操作方式就用得上的了。如果为相应类映射关系设置了 batch-size,那么使用这种操作方式允许多个对象被一批装载(因为返回的是代理,无需从数据库中抓取所有对象的数据)。 如果你不确定是否有匹配的行存在,应该使用 get() 方法,它会立刻访问数据库,如果没有对应的记录,会返回 null。
      

  13.   

    你找的这段我在网上昨天就看过了。我就是想知道Cat fritz = (Cat) sess.load(Cat.class, generatedId);generatedId是哪来的? 是不是这样【Cat fritz = (Cat) sess.load(Cat.class, generatedId)】就能检索出记录。
    不用写语句什么的
      

  14.   

    load(entityClass, id)
    这里的id指是传入entityClass类对应的id
    当对象.hbm.xml配置文件<class>元素的lazy属性设置为false时,执行load方法时,就会有hql查询语句生成当对象.hbm.xml配置文件<class>元素的lazy属性设置为true时,执行load方法时,它会启用延迟加载,不会去查数据库,也就不会有hql查询语句生成
      

  15.   

    难道你练官方文档不看?!
    练Hibernate提供的API也不看?
    load方法返回的是一个对象还是一个集合????
    通过返回值自己不能推理?还要问?你是高中生么???不过现在可没高中老师教java!没人一口饭一口饭的喂!
      

  16.   

    我给你解释过了吧????懒得说第二遍了!你自己想想你用Jdbc的话 id是怎么获得的吧!!!
    我的天啊!!崩溃了!
      

  17.   

    hibernate的特点是什么?复杂问题简单化!方便了程序员的开发!你是从什么途径学的hibernate!看书的话我想不会问上面的问题,看视频的话我想也不会问上面的问题!你怎么学的!专门又翻出hibernateAPI文档看了下,红色字体标注的地方已经很简单很明了的说明问题了!!!!
    真的解释的足够了!!!!!!!!非常足够了!!!!
    load
    public Object load(Class theClass,
                       Serializable id)
                throws HibernateException
    Return the persistent instance of the given entity class with the given identifier, assuming that the instance exists. You should not use this method to determine if an instance exists (use get() instead). Use this only to retrieve an instance that you assume exists, where non-existence would be an actual error. Parameters:
    theClass - a persistent class
    id - a valid identifier of an existing persistent instance of the class 
    Returns:
    the persistent instance or proxy 
    Throws: 
    HibernateException
      

  18.   

    哈哈。。
    我觉得load是返回一个对象,find是返回一个集合。
      

  19.   

    框架很多,死学是记不住的!学知识学的是理念!自己要有推理的能力!才能记住一些必须的东西!我不用hibernate已经半年了!但这些知识点根本不用死学的!学东西活点!web方面的框架很多都是完全可以推理出来的!
      

  20.   

    hibernate学习?我就是这个项目用到了 拿过来熟悉一下直接就做了。。