您的位置:首页 > 其它

org.dbunit.database.AmbiguousTableNameException异常

2016-02-23 19:21 330 查看

org.dbunit.database.AmbiguousTableNameException

在jeesite数据库初始化中,发现报上述异常:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:

run (default-cli) on project jeesite: An Ant BuildException has occured: org.dbu

nit.database.AmbiguousTableNameException: ACT_GE_BYTEARRAY

[ERROR] around Ant part ...<dbunit userid="${jdbc.username}" driver="${jdbc.driv

er}" password="${jdbc.password}" url="${jdbc.url}">... @ 24:107 in D:\jeesite\th

inkgem-jeesite-cedd6b2\target\antrun\build-main.xml

1、异常原因

数据库中存在两个表名相同的表,可能SCHEMA名不同。

通过SQL语句可以查询到是哪两个SCHEMA下的表名重名:

select * from dba_tables where table_name like '%ACT_GE_BYTEARRAY%';

或者

select * from all_tables where table_name like '%ACT_GE_BYTEARRAY%';

OWNER TABLE_NAME TABLESPACE_NAME CLUSTER_NAME

ACTIVITI ACT_GE_BYTEARRAY ACTIVITI

JEESITE ACT_GE_BYTEARRAY JEESITE

原来是ACTIVITI中已经导入过名为“ACT_GE_BYTEARRAY”的表。

2、解决

因为SQL语句不好修改,若能修改,加上SCHEMA名或OWNER名应能消除该问题。

一种解决方法是,缩窄当前数据库用户的访问权限,从dba角色降级为connect和resource角色。只能访问自己的schema下的表,从而避免表名重复。

附加知识:

(1)Oracle角色、权限的一些常用视图

ORACLE中数据字典视图分为3大类, 用前缀区别,分别为:USER,ALL 和DBA,许多数据字典视图包含相似的信息。

USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息

ALL_*:有关用户可以访问的对象的信息,即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息

DBA_*:有关整个数据库中对象的信息

DBA_*>= ALL_*>= USER_*

(2)系统权限分类:

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。

CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

对于普通用户:授予connect, resource权限。

对于DBA管理用户:授予connect,resource, dba权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: