数据库:-- Create table
create table T_USER
(
  userid   NUMBER(10) not null,
  username VARCHAR2(255 CHAR),
  scontent CLOB
)User的映射文件: <class name="com.jungle.po.User" table="t_user">
<id name="userid" column="userid" type="integer">
<generator class="native" />
</id>
<property name="username" column="username" type="string"></property>
<property name="scontent" column="scontent" type="string"></property> <set name="details" cascade="all"  lazy="true">
<key column="userid"></key>
<one-to-many class="com.jungle.po.Detail" />
</set>
</class>
<class name="com.jungle.po.Detail" table="t_detail" >
<id name="detailid" column="detailid" type="integer">
<generator class="native" />
</id>
<property name="detailname" column="detailname" type="string"></property> <many-to-one name="user" column="userid" class="com.jungle.po.User"></many-to-one>
</class>
//无论是get还是load使用user.getScontent()都能得到数据库中的clob为什么
public static void testGet() {
Session session = HibernateSessionFactory.getSession();
User user = (User) session.get(User.class, 1);
System.out.println(user.getUsername());
System.out.println(user.getScontent());
                  System.out.println(user.getDetails());
HibernateSessionFactory.closeSession(); }
请问为什么 属性的lazy="true" 为什么get的时候还是会得到
load默认就是懒加载 所有我认为lazy="true" 是让get的时候不加载
可是给属性设置lazy="true"查看打印出来的sql还是查询了lazy="true"的属性

解决方案 »

  1.   


     <property name="username" column="username" type="string" lazy="true"></property>
     <property name="scontent" column="scontent" type="string" lazy="true"></property>
    scontent为大字段就算lazy="true"都会加载这个属性!
      

  2.   

    你的User.hbm.xml是自己写的还是生成的?你按着这样改改试试。
    单端:
    <set name="" table=""  cascade="all" inverse="true" >
             <key column="" />
             <one-to-many class=""/>
    </set>多端:
    <many-to-one name=""  column=""   class=""   lazy="true" not-null="true" />
      

  3.   

    ..
      检测 是否开启 有个好方法 用debug  断点测试吧.   开启懒加载.  会发现 hibernate 帮你创建了一个 代理类
      

  4.   

    有时候可能是session关闭了,延迟加载无效了。
      

  5.   

     
    //你延迟加载是加载Detail的数据,而不是user的数据啊.user.getScontent()当然能取到内容.
    public static void testGet() {
            Session session = HibernateSessionFactory.getSession();
            User user = (User) session.get(User.class, 1);
            System.out.println(user.getUsername()); 
            HibernateSessionFactory.closeSession();
            System.out.println(user.getDetails()); //这里session已经关闭,所以这里取延迟加载数据会出错
     ////////////////////////////////////////////////////////////////////////////////////
       //如果你不想取user时把scontent 取出来,你可以用load取
          Session session = HibernateSessionFactory.getSession();
       User user = (User) session.load(User.class, 1); //这里不会发sql语句去数据库取,只是一个代理对象
       HibernateSessionFactory.closeSession();
       System.out.println(user.getScontent());  //session关闭,取数出错,如果是get的话,这里就不会出错
     }
      

  6.   


    +++
    keyi可以看看session
      

  7.   


    可是我的session是在最后才关闭的!老师说这个版本的 hibernate属性lazy无效!我也感觉很是奇怪 !