如果表允许复合唯一键和空值,如何使用dbUnit?

问题描述

我试图找到一种将dbUnit与具有唯一键而不是主键的表一起使用的方法。一直在尝试以下解决方案:solution1soulution2。但是,仅当所有值都不为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 (将#修改为@)