如何解决如果表允许复合唯一键和空值,如何使用dbUnit?
我试图找到一种将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 举报,一经查实,本站将立刻删除。