如何将DBunit限制为特定架构。在做DatabaseOperation.CLEAN_INSERT时, dbunit这个异常
org.dbunit.database.AmbiguousTableNameException:SCHEMA_UPDATE_TBL
但是这个表不在我正在使用的模式中。我认为它来自同一个Oracle数据库中的另一个表。如何限制dbunit查看我的架构。
我正在使用jpa。
例如我在persistence.xml中使用的连接就像这样
<property name="hibernate.connection.username" value="mikea"/>
<property name="hibernate.connection.password" value="mikea"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:MOT4"/>
此致
答案 0 :(得分:2)
确定。我想到了。 DatabaseConnection()构造函数接受默认架构参数。例如,“mikea”是我想要使用的模式:
connection = new DatabaseConnection(
( ( HibernateEntityManager ) em ).getSession().connection(),"mikea" );
DatabaseConfig config = connection.getConfig();
Class factory_class = Class.forName( "org.dbunit.ext.oracle.Oracle10DataTypeFactory" );
config.setProperty( DatabaseConfig.PROPERTY_DATATYPE_FACTORY, factory_class.
newInstance() );
答案 1 :(得分:1)
这也是DBUnit常见问题解答的答案:http://dbunit.sourceforge.net/faq.html#AmbiguousTableNameException
如果未指定架构且DbUnit检测到此错误,则会发生此错误 它从多个表中获取列信息 同名,位于不同的模式中。
您可以通过三种不同的方式解决此问题:
- 在创建数据库连接时提供架构名称。注意 对于Oracle,您必须以大写形式指定架构名称。
- 确保仅限访问连接以访问一个架构。
- 启用限定表名称功能。 http://dbunit.sourceforge.net/properties.html#qualifiedtablenames