java - 作为模式的用户或所有者运行 DBUnit 之间有区别吗

标签 java oracle spring dbunit

目前我正在使用 DBUnit 来测试我的网络服务。

当我使用架构所有者指定数据库用户凭据时,一切正常。

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

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

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

那么 DBUnit 处理这个问题的方式有什么不同吗?我目前正在使用 dbunit 2.4.8 和 SpringJUnit。

更新 所以我发现我犯了一个错误。测试实际上并没有 当我使用用户凭据进行测试时,完全可以工作。

最佳答案

您到底是如何创建同义词的?

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

公共(public)同义词是使用PUBLIC关键字创建的

CREATE PUBLIC SYNONYM ens_mrm_configuration
   FOR schema_owner.ens_mrm_configuration

而私有(private)同义词则不然

CREATE SYNONYM ens_mrm_configuration
   FOR schema_owner.ens_mrm_configuration

如果您要创建私有(private)同义词,则需要在 USER 架构中创建同义词。

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

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

关于java - 作为模式的用户或所有者运行 DBUnit 之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7791864/

相关文章:

java - Android - 存储对 ApplicationContext 的引用

java - 如何在Java中使图像覆盖屏幕上尽可能多的空间而不丢失比例?

Java Swing 接口(interface)问题

java - Spring MVC中无法访问maven项目资源

具有整数值的请求参数的Spring RestTemplate postforobject

java - 了解时间戳中的亚秒值

oracle - 在oracle中估计索引创建时间

sql - 按级别连接不随每行字段的变化而调整

sql - SQL查询中的时区转换

java - 如何在不使用 hibernate 拦截器从数据库中获取的情况下获取previouseState来创建审计跟踪表?