微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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