问题描述
我试图找到一种将dbUnit与具有唯一键而不是主键的表一起使用的方法。一直在尝试以下解决方案:solution1,soulution2。但是,仅当所有值都不为null时,它才有效。我正在使用oracle数据库。
create table CLIENT
(
NAME VARCHAR2(255 char),LAST_NAME VARCHAR2(60 char),PHONE NUMBER,ADDRESS VARCHAR2(600 char) not null,constraint CLIENT_UQ
unique (NAME,LAST_NAME,PHONE)
)
数据集文件
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<CLIENT NAME="name" LAST_NAME="lName" PHONE="[null]" ADDRESS="value4" />
</dataset>
时髦
//service
static IDatabaseTester getTestDB(Map<String,List<String>> tablePrimaryKeyMap) {
...
public IDatabaseConnection getConnection() throws Exception {
IDatabaseConnection connection = super.getConnection();
DatabaseConfig config = connection.getConfig()
config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,new Oracle10DataTypeFactory());
config.setProperty(DatabaseConfig.PROPERTY_PRIMARY_KEY_FILTER,new IColumnFilter() {
@Override
boolean accept(String tableName,Column column) {
return tablePrimaryKeyMap.get(tableName).contains(column.getColumnName())
}
})
return connection;
}
...
}
//steps
@BeforeStory
void before() {
...
getTestDB(['CLIENT':['NAME','LAST_NAME','PHONE']]).onSetup()
...
}
问题是,当所有3个唯一键列都不为null时,一切正常。我可以执行测试,地址已更新。但是一旦我将null设置为关键列之一,我就会得到
java.sql.sqlIntegrityConstraintViolationException: ORA-00001: unique constraint (COMPANY.CLIENT_UQ) violated
尽管我能够手动插入相同的数据
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)