java - JUnit 测试之间的相同 hibernate session 导致问题

标签 java spring hibernate junit4 dbunit

我正在开发一个基于 Spring 2.5 和 hibernate 3 的网络应用程序。最近我引入了 JUnit 测试,并使用 DBUnit 框架完成了一些集成测试。 DBUnit 应该在一次测试和另一次测试之间使用 xml 数据集更新数据库,而且它运行良好,正如我所见。

但是,当我在测试中更新一个元素时,hibernate 似乎捕获了这个信息,甚至我在下面的测试中加载了该元素,该信息就是我修改过的信息。如果我在执行暂停时查看数据库,数据库将由 DBUnit 正确重置。所以我认为这可能是一个 Hibernate 问题..

有没有办法在测试之间进行拆卸,说我想为我的 spring 上下文创建一个新的 hibernate session ?顺便说一下,我没有使用 Spring 注解,而是通过代码获取 Spring 上下文:

String[] contextLocations = new String[2];
contextLocations[0] = "WebContent/WEB-INF/applicationContext.xml";
contextLocations[1] = "src/System_V3/test/applicationContext.xml";
context = new FileSystemXmlApplicationContext(contextLocations);

DBUnit 设置:

@Before
public void setUpBeforeClass() throws Exception {
    handleSetUpOperation();
}

private static void handleSetUpOperation() throws Exception {
    conn = getConnection();
    conn.getConnection().setAutoCommit(false);
    final IDataSet data = getDataSet();
    try {
        DatabaseOperation.REFRESH.execute(conn, data);
    } finally {
        conn.close();
    }
}

private static IDatabaseConnection getConnection() throws ClassNotFoundException, SQLException,
        DatabaseUnitException {
    Class.forName("org.gjt.mm.mysql.Driver");
    return new DatabaseConnection(DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/web_database", "root", "pass"));
}

private static IDataSet getDataSet() throws IOException, DataSetException {
    ClassLoader classLoader = TestPrueba.class.getClassLoader();
    return new FlatXmlDataSetBuilder().build(classLoader
            .getResourceAsStream("System_V3/test/dataset.xml"));
}

测试是在 JUnit 4 中仅使用 @Test 注释完成的,测试类未扩展任何库类。

有什么建议吗?

最佳答案

不确定这是否可以帮助您 - 但以防万一......

尝试使用 session.clear() 并在拆卸方法中使用它。 请看这里http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html#clear ()

根据规范 session.clear() -> 完全清除 session 。驱逐所有加载的实例并取消所有未决的保存、更新和删除。不要关闭打开的迭代器或 ScrollableResults 的实例。

关于java - JUnit 测试之间的相同 hibernate session 导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11668100/

相关文章:

java - 将 JCheckBox 添加到列中除最后一个单元格之外的所有单元格

java - ImageMagick Convert for EPS to JPG 未正确调用

java - Hibernate内部连接非主键

hibernate - Grails和JPA批注+ hibernate 映射文件。如何摆脱这个错误?

java - 为什么我的 JAVA SDK 没有 javac 二进制文件?

java - sql 和使用 spring 注入(inject)属性哪个更好

java - org.hibernate.MappingException : Could not determine type

java - Spring MVC Rest Service JSON - 将 boolean 值的默认值设置为 true

java - 如何使用 hibernate 条件对象使用内部连接选择查询

java - 在这种情况下使用 Netbeans Platform 或 Eclipse RCP 是否太过分了?