麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

spring在MVC層解決JPA的緩遲加載問題

2019-11-18 15:37:02
字體:
來源:轉載
供稿:網友

    作為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<NewsDir> children = new java.util.ArrayList<NewsDir>();// 下級目錄

    @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的配置:

<aop:config>
                <aop:pointcut id="CmsManage"
            eXPression="execution(* com.easyjf.cms.service.*.*(..))" />
<aop:advisor advice-ref="cmsManageAdvice"
            pointcut-ref="CmsManage" />
<tx:advice id="cmsManageAdvice"
        transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" propagation="SUPPORTS"
                read-only="true" />
            <tx:method name="query*" propagation="SUPPORTS"
                read-only="true" />
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
<bean id="cmsManageService"
        class="com.easyjf.cms.service.impl.CmsManageServiceImpl">
        <property name="newsDirDao" ref="newsDirDao" />
    </bean>
在這里,當mvc層執行到$!info.getChildren()方法的時候,將會用到緩遲加載,由于Spring的事務是配置在service層的,因此在執行service.queryDirsByConditions方法完成后就關閉了事務。因此運行程序就會出現類似下面的錯誤信息:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av在线播放免费观看 | 精品国产一区二区三 | 黄色成人短视频 | 美女毛片儿 | 欧美日韩免费在线观看视频 | 日本成人一二三区 | 国产精品久久久久久久hd | omofun 动漫在线观看 | 久久久www免费看片 亚洲综合视频一区 | 久久久久久久久久久久久久久伊免 | 91午夜免费视频 | 亚洲片在线观看 | chinesexxx少妇露脸 | 色中射| 色视频一区二区 | 精品国产乱码久久久久久丨区2区 | 免费黄色在线电影 | 国产精品成人免费一区久久羞羞 | 午夜天堂在线视频 | 国产亚洲综合一区二区 | 成人高清网站 | 欧美日韩亚洲国产精品 | 国产精品刺激对白麻豆99 | 极品销魂一区二区三区 | 亚洲精品午夜在线 | 一级免费在线 | 日本高清视频网站www | 欧美城网站地址 | 国产免费一级淫片a级中文 99国产精品自拍 | www.99re14.com| 久久99精品久久久久久久久久久久 | 久久久久九九九女人毛片 | 国产一区二区在线免费 | 色播一区| 久久网一区二区 | 999久久国产 | 国产免费小视频在线观看 | 欧美日韩色片 | 久久综合综合久久 | 精品欧美一区二区精品久久 | 久久精品亚洲欧美日韩精品中文字幕 |