【问题标题】:DbUnit DbComparisonFailure expected:<uniqueidentifier>预期 DbUnit DbComparisonFailure:<唯一标识符>
【发布时间】:2017-12-04 11:13:55
【问题描述】:

我们进行数据库/数据集比较。

源数据库:SQL Server
目标数据库:SAP HANA

错误信息
org.dbunit.assertion.DbComparisonFailure:不兼容的数据类型:(table=dataset, col=JobId) 预期:,但实际是:

解决方法:cast(JobId as varchar(36)) JobId

但是为什么会出现这个错误? JobId 在源表中被定义为 varchar(36)
如何使这个工作(生成的 SQL 和手动添加演员很麻烦)

【问题讨论】:

    标签: sql-server comparison hana dbunit


    【解决方案1】:

    查看谷歌结果,这似乎是 MS SQL Servers UniqueIdentifier 列类型的常见问题。见http://dbunit.wikidot.com/mssql

    在那里,他们基本上将类型映射放在 DBUnit 工厂代码中,而不是每列上的 CAST: 公共类 MsSqlDataTypeFactory 扩展 DefaultDataTypeFactory { 公共静态 int NVARCHAR = -9; 公共静态 int 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);
     }
    }
    

    【讨论】:

    • 许多 thx Lars - 甚至在这种情况下指出解决方案:)
    【解决方案2】:

    感谢 Lars Br 的回答:

    我做了以下解决方案:

    1. 从类路径中删除 DbUnit jar(版本 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();
          }
      }
      

      /* 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();
          }
      }*/
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2014-03-05
      • 2012-06-02
      相关资源
      最近更新 更多