网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.java反射功能.
.转scjp第一站的首页内容.
.面向服务架构(SOA)的原则.
.猜数字游戏,我的第一个J2ME程序,.
.Motorola V180,V501,V600,C650等.
.Java Socket编程(二)-3.
.API 将 XML 数据绑定到 Java 对象.
.java线程的缺陷.
.int 和 String 互相转换的多种方.
.maven的POM结构.
.Tomcat中怎样设置虚拟目录.
.java 词汇表速查手册(附:J2EE相.
.状态栏动态提示超链接地址的效果.
.java新手入门:Java反射机制.
.谈谈J2SE中的序列化(二).
.SUN系统维护命令大全.
.对象的接口.
.J2EE运行环境性能优化艺术之三.
.Struts 的优点及其在 Apusic 上的.
.深入了解Java 5.0的垃圾收集.

让Spring帮助你在MVC层解决JPA的缓迟加载问题

发表日期:2008-1-5


【引自大峡-华山论剑的博客】作为EJB3.0的一部分,JPA是一个好东西。其简单的配置方式及强大的默认配置支持,使其可以轻松自由的存在于轻量与重量之间,假如现在您的JavaEE项目,不管是选择轻量级构架还是重量级构架,假如持久层不选择使用JPA,而是用一些ORM框架(如Hibernate、TopLink)的专用API,那么在将来的某一天一定会为这个选择而说出至尊宝那句“假如上天再给我一个机会…”的至理名言。

下面是一个简单的Entity,是对一个CMS系统中,关于树状信息目录实体类的定义,包括了一些具体的映射的配置信息。

@Entity

public class NewsDir ...{

@Id

@GeneratedValue(strategy = GenerationType.TABLE)

private Long id;// 主键

@Column(unique = true, nullable = false, length = 16)

private String sn;// 目录编号

private String title; // 目录名称

@OneToMany(mappedBy = "parent", cascade = javax.persistence.CascadeType.REMOVE)

private List children = new java.util.ArrayList();// 下级目录

@ManyToOne

private NewsDir parent;// 父级目录

}

当然,跟任何其它优秀的技术一样,JPA也不是完美的,在使用的过程中难免都会出这样那样的问题,这就需要我们程序员具有格物致知的本领,在应用中灵活应付这些问题。

这里例举一个缓迟加载的问题,以上面的新闻目录Entity为例。对于parnet与children这个一对多的双向关联,为了提高系统效率,children默认使用的是缓迟加载的方式。在一些轻量级的构架中,由于脱离了J2EE容器及事务支持,经常会出现Entity脱离了Persitence Context,变成了detach或EntityManager关闭,导致一些我们预想中的一些功能无法正常运行。

最常见的就是在使用MVC框架的时候,在表示层无法加载需要缓迟加载的数据。比如,在一个基于EasyJWeb的mvc应用中,action中的方法如下:

public Page doList(WebForm form, Module module) ...{

NewsDirQueryObject ndqo = new NewsDirQueryObject();

form.toPo(ndqo);

ndqo.setDel(true);

IPageList pageList = service.queryDirsByConditions(ndqo);

CommUtilForTeaec.saveIPageList2WebForm(pageList, form);

form.addResult("dirPath", this.getDirPath(form));

return module.findPage("list");

}

在模板文件中有如下内容:

#foreach($info in ${dir.children})

目录名称:${info.title}

#end

关于业务逻辑层Bean的配置:




eXPression="execution(* com.easyjf.cms.service.*.*(..))" />

            pointcut-ref="CmsManage" />           


transaction-manager="transactionManager">



                read-only="true" />

                read-only="true" />








class="com.easyjf.cms.service.impl.CmsManageServiceImpl">   




上一篇:spring在MVC层解决JPA的缓迟加载问题 人气:627
下一篇:基于Struts和EJB的Web Service框架研究 人气:719
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐