首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • hibernate3 属性 延迟加载 中的问题,请大家有知道的帮帮忙,谢谢。 [已结贴,结贴人:myepoch]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myepoch
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-22 14:26:57 楼主
    detail属性是clob字段 ,所以我想让hibernate延迟加载该属性,下面是我的hibernate 中映射的配置

    Java code <property name="detail" lazy="true" type="org.springframework.orm.hibernate3.support.ClobStringType" column="detail"  />


    虽然设置了lazy="true",但是每次在批量抓取的时候hibernate还是会把clob字段读进来,大家帮忙看下问题出在哪呢?
    Hibernate:
        select
            this_.userID as userID0_0_,
            this_.loginName as loginName0_0_,
            this_.detail as detail0_0_
        from
            userinfo this_


    映射文件中对特定的属性设置lazy,定义该属性为延迟载入。

    <hibernate-mapping>
    <class name="org.cc.domain.UserInfo" table="userinfo">
    <id name="userID" column="userID">
    <generator class="identity" /> </id>
       
    <property name="loginName" column="loginName" />
    <property name="detail" column="detail"
    type="org.springframework.orm.hibernate3.support.ClobStringType" lazy="true"/>
    </class>
    </hibernate-mapping>
    属性的延迟载入要求在其代码构建时加入二进制指示指令(bytecode instrumentation),如果你的持久类代码中未含有这些指令, Hibernate将会忽略这些属性的延迟设置,仍然将其直接载入。

    在Ant的Task中,进行如下定义,对持久类代码加入“二进制指令。”

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="hibernateSample" default="instrument" basedir=".">
      <property name="lib.dir" value="./WebRoot/WEB-INF/lib"/>
      <property name="classes.dir" value="./WebRoot/WEB-INF/classes"/>
      <path id="lib.classes.path">
          <fileset dir="${lib.dir}">
            <include name="**/*.jar"/>
          </fileset>
      </path>
      <target name="instrument">
          <taskdef name="instrument" classname="org.hibernate.tool.instrument.InstrumentTask">
            <classpath path="${classes.dir}"/>
            <classpath path="lib.class.path"/>
          </taskdef>
          <instrument verbose="true">
              <fileset dir="${classes.dir}/org/cc/domain/">
                <include name="UserInfo.class"/>
              </fileset>
          </instrument>
      </target>
    </project>


    提示我:
    BUILD FAILED
    taskdef class org.hibernate.tool.instrument.InstrumentTask cannot be found

    更新为一下:
    classname="org.hibernate.tool.instrument.InstrumentTask"
    classname="org.hibernate.tool.instrument.BasicInstrumentationTask"
    classname="org.hibernate.tool.instrument.cglib.InstrumentTask"
    classname="org.hibernate.tool.instrument.javassist.InstrumentTask"
    还是提示以上失败信息


    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cjs_jackson
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:50:591楼 得分:4
    关注一下。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mellow_msb
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:43:232楼 得分:6
    延迟加载是不是针对对象的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myepoch
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:51:323楼 得分:0
    HIBERNATE3中可以针对对象属性的了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myepoch
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:56:444楼 得分:0
    能帮帮忙吗,谢谢。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myepoch
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 17:05:355楼 得分:0
    有人知道吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • huaweiheart1
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 16:03:426楼 得分:6
    延迟加载是针对对象的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myepoch
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 19:40:037楼 得分:0
    hibernate3提供了对属性的延迟加载啊!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jfheng
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-27 22:44:198楼 得分:4
    教你个简单方法 通过 select new 延迟加载
    在你的dto 中建一个 构造方法

    String hql ="select new " + attachFile +
            " (t1.docAttachFileOID,t1.fileName,t1.extName,t1.fileType,t1.extOID,t1.fileSize) from " + attachFile+" as t1 where t1.theExchangeDoc.exchangeDocOID = ?";
            List list= hibernateOperations.find(hql, exchangeDocOID);
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved