Hibernate 3 延迟加载

wshcdr 2012-06-09 04:47:35
我想要一个Hibernate 3 延迟加载的例子,谁能给我一个?
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eternalc 2012-06-20
  • 打赏
  • 举报
回复
你先搞懂什么叫延迟加载,

很简单的,讲白了,就是一个表,可能有100个字段,但是我可能只要用3个字段。
或者一个pojo对象,有set集合,比如一个学生,对应10门课程的对象

你不用延迟加载,你直接get表的时候时候,给你加载出100个字段的信息,结果我97个都用不到
set的时候,我只要学生的名字,你也给查出10门课程的详细信息,或者,我可能查课程只要个名称就行了。结果你把每个课程的7788的东西都查出来了。这不是很浪费了

所以你在对应hbm.xml的类或者字段上的属性上,比如student.hbm.xml的student或者<set>...加上lazy="true" 就是了。Hibernate3自动是默认开启的

然后就没有然后了,记得web.xml里启用spring给的过滤器,来防止session的提早关闭就是了,管它为什么要写,你写了就是了
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>


<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
wshcdr 2012-06-20
  • 打赏
  • 举报
回复
Mapping文件中对

xxxTypeInfo为对象, XxxTrackTypeInfo为所引用对象的实体类, column="track_type_id"表示外键
<many-to-one name="xxxTypeInfo" class="XxxTrackTypeInfo"
column="track_type_id" outer-join="false" insert="true" cascade="all"></many-to-one>


测试代码

Session session = null; 
Transaction ta = null;

try{
session = this.service.GetMySession();
ta = session.beginTransaction();

XxxTrackInfo myentity = (XxxTrackInfo)session.load(XxxTrackInfo.class, 11);

System.out.println(myentity.getLocation());
System.out.println(myentity.getXxxTypeInfo().getRatedVol());

System.out.println(myentity.getXxxTypeInfo().getTypeName());

}catch(Exception e){
e.printStackTrace();
if(ta != null){
ta.rollback();
}

}finally{
session.close();
}
wshcdr 2012-06-20
  • 打赏
  • 举报
回复
自己搞定了
ycj80217 2012-06-20
  • 打赏
  • 举报
回复
延迟加载好像只要在HBM中某个一对多属性设置个代理就行了具体怎么操作楼主看教程
  • 打赏
  • 举报
回复
例子太大,你也看不了啊。 还不如去网上找找 ,应该有的 。
wshcdr 2012-06-10
  • 打赏
  • 举报
回复
怎么没人回啊

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧