Ожидается DbUnit DbComparisonFailure:‹uniqueidentifier›

Мы делаем сравнение баз данных / наборов данных.

Исходная БД: SQL Server
Целевая БД: SAP HANA

Сообщение об ошибке:
org.dbunit.assertion.DbComparisonFailure: несовместимые типы данных: (table=dataset, col=JobId) ожидалось:‹uniqueidentifier›, но было:‹ ВАРЧАР›

Обходной путь: cast(JobId as varchar(36)) JobId

Но почему возникает эта ошибка? JobId определен как varchar(36) в исходной таблице
Как заставить это работать (SQL генерируется и вручную добавляется состав громоздкий)


person Thorsten Niehues    schedule 04.12.2017    source источник


Ответы (2)


Просматривая результаты Google, похоже, что это обычная проблема с типом столбца UniqueIdentifier MS SQL Servers. См. http://dbunit.wikidot.com/mssql.

Там они в основном помещают сопоставление типов в фабричный код DBUnit вместо CAST для каждого столбца: public class MsSqlDataTypeFactory extends DefaultDataTypeFactory { public static int NVARCHAR = -9; общедоступный статический интервал UNIQUEIDENTIFIER = -11;

public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException
{
    if (sqlType == NVARCHAR)
    {
        return DataType.VARCHAR;
    }

    if (sqlType == UNIQUEIDENTIFIER)
    {
        return DataType.VARCHAR;
    }

    return super.createDataType(sqlType, sqlTypeName);
 }
}
person Lars Br.    schedule 05.12.2017
comment
Большое спасибо, Ларс - даже указал решение в этом случае :) - person Thorsten Niehues; 05.12.2017

Благодаря ответу Ларса Бр:

Я сделал следующее решение:

  1. Удалить банку DbUnit из пути к классам (версия 2.5.4)
  2. Добавить исходный код DbUnit (также версии 2.4.5)
  3. Измените метод класса org.dbunit.ext.mssql.MsSqlDataTypeFactory
    public DataType createDataType(int sqlType, String sqlTypeName) throws DataTypeException

    if(sqlType == Types.CHAR)
    {
        if (UniqueIdentifierType.UNIQUE_IDENTIFIER_TYPE.equals(sqlTypeName))
        {
            return new UniqueIdentifierType();
        }
    }
    

    to

    /* Do not generate UNIQUE_IDENTIFIER_TYPE since it would not match varchar on SAP HANA
    if(sqlType == Types.CHAR)
    {
        if (UniqueIdentifierType.UNIQUE_IDENTIFIER_TYPE.equals(sqlTypeName))
        {
            return new UniqueIdentifierType();
        }
    }*/
    
person Thorsten Niehues    schedule 05.12.2017