`
ljh2008
  • 浏览: 46620 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

junit测试之hiberante延迟加载问题

阅读更多

很多新手都会遇到的hibernate session关闭时的延迟加载错误,我想原因大家都知道,当session关闭后,你去访问对象中的延迟加载属性,都会报session已关闭的错误。解决办法一般有四种:
1、hbm映射文件中,让集合或对象属性的 lazy=false
2、在关闭session之前,使用Hibernate.initialize(Object proxy)强制加载
3、在关闭session之前,对延迟属性进行一次get访问
4、使用hql预加载,一般会用到fetch语句
以面四种方式,如果用在与spring整合后的hibernate中,方式2、方式3可能不太好合,除非你使用模板的execute回调,那么我们在项目中是如何解决的呢?
采用openSessionInView过滤器,该过滤器非常有效,会保证在同一次请求中,打开一个session,在当次请求中,打开不会关闭(具体底 层实现用到了ThreadLocal类,有兴趣的可以到网上搜一下),请求结束后spring会妥善处理好session的。有了 openSessionInView,我们几乎看不到延迟加载错误了,但是,在开发中我们又遇到了另一个严峻的问题,我们在业务层的测试代码中,去无法开 启openSessionInView,这就出现了,在action及页面中都正常的代码,拿到junit测试中却无法通过,这该如何是好?解决办法如 下:
在你的测试类中的setUp和tearDown中,加上下面的代码,注意,要把sessionFactory定义到外面。
private SessionFactory sessionFactory;

public void setUp() throws Exception {
sessionFactory = (SessionFactory) beanFactory.getBean("sessionFactory");
Session s = sessionFactory.openSession();
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s));

}

public void tearDown() throws Exception {
SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
Session s = holder.getSession();
s.flush();
TransactionSynchronizationManager.unbindResource(sessionFactory);
}
上面的代码是纯junit下的测试,如果你用了AbstractTransactionalSpringContextTests作为测试基类,sessionFactory的初始化就没有这么复杂了,直接由spring注入进来即可。

0
0
分享到:
评论

相关推荐

    Junit测试案例使用

    3. Junit 的优点:由于 Junit 相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP 中推崇的 test first design 的实现有了现成的手段:用 Junit 写测试代码,写实现代码,运行测试,测试失败,...

    自动饮料机Junit测试(软件测试与质量保证实验).rar

    本实验“自动饮料机Junit测试”旨在帮助学生深入理解和应用单元测试,特别是在Java编程环境下。单元测试是一种针对程序代码最小可测试单元进行验证的方法,通常这个单元是函数或方法。Junit是Java领域广泛使用的单元...

    实验5 JUnit测试框架的使用.doc

    JUnit 测试框架的使用 JUnit 是一个流行的单元测试框架,广泛应用于 Java 项目中,本文将详细介绍 JUnit 测试框架的使用,并提供了两个示例来帮助读者更好地理解和掌握 JUnit 的使用。 一、JUnit 测试框架的使用 ...

    junit测试案例程序

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。在这个“junit测试案例程序”中,我们可以找到一些基本的JUnit测试用例示例,这对于初学者来...

    Junit 单元测试完整案例

    1. Spring TestContext Framework:Spring提供的一个测试支持库,它允许我们加载Spring应用上下文,并提供了一套用于测试的工具和API。 2. `@RunWith(SpringRunner.class)`:这是一个JUnit runner,它使得Spring ...

    junit测试_java_JUnit_JUnit测试_

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。单元测试是对程序中的最小可测试部分——通常是一个函数或方法——进行检查,确保其按照预期工作。JUnit作为...

    Eclipse进行Junit测试

    Eclipse进行Junit测试 Eclipse 是一个功能强大且广泛使用的集成开发环境(IDE),Junit 是一个基于 Java 的单元测试框架。使用 Eclipse 进行 Junit 测试可以大大提高测试效率和质量。 一、Junit 简介 Junit 是一...

    JUnit和单元测试入门简介

    JUnit 单元测试入门简介 JUnit 是一个开源的 Java 测试框架,用于编写和运行可重复的测试。它主要用于白盒测试、回归测试。单元测试是最小粒度的测试,以测试某个功能或代码块。JUnit 框架是 xUnit 系列框架的一个...

    Junit单元测试Junit单元测试Junit单元测试Junit单元测试

    Junit单元测试框架 Junit是Java语言中最流行的单元测试框架,可以帮助开发者编写和运行单元测试,以确保软件的正确性和可靠性。Junit提供了一个统一的测试框架,允许开发者使用Annotations来定义测试用例,实现自动...

    Junit测试jar包

    JUnit是Java编程语言中最常用的单元测试框架之一,它为开发者提供了编写和运行可重复测试的便利工具。在软件开发过程中,单元测试是非常重要的一环,因为它确保了代码的各个独立部分(即单元)按预期工作,有助于...

    Junit测试学习文档

    Junit作为Java编程语言中最流行的单元测试框架,是每个Java开发者必备的技能之一。本学习文档将深入探讨Junit测试的基本概念、用法以及高级特性。 一、Junit简介 Junit是由Ernst von Brucke和Erich Gamma创建的一个...

    javaweb中.java文件测试需要的框架(junit测试).rar

    本压缩包文件"javaweb中.java文件测试需要的框架(junit测试).rar"显然是为了帮助开发者理解如何在Java Web项目中使用JUnit进行测试。 **JUnit框架详解** JUnit是一个基于注解的测试框架,它的核心功能包括: 1....

    junit测试用例calculate

    JUnit 测试用例 calculate JUnit 测试用例 calculate 是一个简单的用例,旨在帮助掌握 JUnit 方法。该测试用例主要涉及到 JUnit 的基本使用、测试方法的编写、测试结果的分析等方面。 一、JUnit 简介 JUnit 是一...

    JUnit测试代码示例

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。在本文中,我们将深入探讨JUnit的核心概念、关键特性以及如何使用JUnit3进行测试。 首先,理解单元测试的概念...

    JUnit测试jar包.zip

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的功能正确性。这个"JUnit测试jar包.zip"文件很可能包含了JUnit库的jar文件,使得开发者能够在自己的项目中引入...

    junit测试测试代码

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的功能正确性。在软件开发过程中,单元测试是至关重要的,因为它们可以帮助发现早期错误,提高代码质量,并简化...

    junit测试小例子

    总的来说,JUnit是Java开发者必备的工具之一,它简化了单元测试的编写和执行,使得软件的质量控制变得更加系统化和高效。通过深入理解和熟练运用JUnit,开发者可以更自信地重构代码,优化性能,并确保软件的健壮性。

    Junit单元测试文档

    junit3 junit4 api,单元测试的利器

    Junit测试.mp4

    Junit测试.mp4

Global site tag (gtag.js) - Google Analytics