运行DBUnit作为模式的USER或OWNER之间是否存在差异

时间:2011-10-17 09:36:17

标签: java oracle spring dbunit

目前我正在使用DBUnit来测试我的webservices。

当我使用模式的OWNER指定db用户凭据时,一切正常。

如果我将数据库凭据更改为以用户身份登录,我会得到:

> [Main Thread] ERROR org.dbunit.database.DatabaseDataSet - Table   
> 'ens_mrm_configuration' not found in   
> tableMap=org.dbunit.dataset.OrderedTableNameMap[_tableNames=[],   
> _tableMap={}, _caseSensitiveTableNames=false]

我知道OWNER应该首先为我想访问的所有表授予SELECT,UPDATE和INSERT(所以我就是这样做了)我还创建了SYNONYMS来引用实际的表。最后这两个场景都有效,但第一次测试失败并出现此错误如果我以USER身份运行测试。

DBUnit如何处理这个有什么区别?我目前正在使用dbunit 2.4.8和SpringJUnit。

更新  所以我发现我弄错了。测试实际上没有     当我使用USER凭证进行测试时,可以正常工作。

1 个答案:

答案 0 :(得分:1)

你是如何创建同义词的?

在Oracle中,同义词可以是公共的(在这种情况下,它对所有用户可见)或私有(在这种情况下,它只对同义词的所有者可见)。你在创建公共同义词吗?或者你在创建私人同义词?

使用PUBLIC关键字

创建公共同义词
CREATE PUBLIC SYNONYM ens_mrm_configuration
   FOR schema_owner.ens_mrm_configuration

而私人同义词不是

CREATE SYNONYM ens_mrm_configuration
   FOR schema_owner.ens_mrm_configuration

如果要创建私有同义词,则需要在USER模式中创建同义词。

如果您以USER身份登录,可以运行此查询并发布结果

SELECT owner, object_name, object_type
  FROM all_objects
 WHERE object_name = 'ENS_MRM_CONFIGURATION';