我也遇到了同样的错误,上面接受的修复方法没有解决我的问题。但是我能够找到解决方案。
我的设置包括DBUnit(2.4),作为我的JPA提供者的Eclipselink(2.1)和作为我的后端数据库的Postgres。另外,在我的场景中,我没有为每次测试运行删除和重新创建表。我的测试数据已经存在。我知道这是错误的做法,但更多的是测试/原型制作场景。下面的代码说明了用于解决我的问题的DBUnit配置。
54 // ctx represents a spring context55 DataSource ds = (DataSource)ctx.getBean("myDatasourceBean");56 Connection conn = DataSourceUtils.getConnection(ds);57 IDatabaseConnection dbUnitConn = new DatabaseConnection(conn, "public");58 DatabaseConfig dbCfg = dbUnitConn.getConfig();59 dbCfg.setFeature(DatabaseConfig.FEATURE_CASE_SENSITIVE_TABLE_NAMES, Boolean.TRUE);60 IDataSet dataSet = new FlatXmlDataSet(ClassLoader.getSYstemResourceAsStream("mydbunitdata.xml"));61 DatabaseOperation.REFRESH.execute(dbUnitConn, dataSet);
上面的代码中的两件事解决了我的问题。首先,我需要定义DBUnit应该使用的架构。这是在上面的第57行上完成的。设置新的DatabaseConnection时,如果schema(“ public”)不为null,则应将其传递。
其次,我需要DBUnit对数据库表名称区分大小写。在我的DBUnit xml文件(“ mydbunitdata.xml”)中,表名都是小写的,就像它们在数据库中一样。但是,如果不告诉DBUnit使用区分大小写的表名,它将查找Postgres不喜欢的大写表名。因此,我需要在第59行完成的DBUnit中设置区分大小写的功能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)