注册

activiti7框架如何集成达梦

口苗 2021/01/27 2598 1 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.0
【操作系统】:windows
【CPU】:
【问题描述】*:
集成达梦时一直报错:

Error querying database. Cause: dm.jdbc.driver.DMException: 第1 行附近出现错误:

无效的表或视图名[ACT_GE_PROPERTY]

The error may exist in org/activiti/db/mapping/entity/Property.xml

The error may involve org.activiti.engine.impl.persistence.entity.PropertyEntityImpl.selectProperty

The error occurred while executing a query

SQL: select * from ACT_GE_PROPERTY where NAME_ = ?

Cause: dm.jdbc.driver.DMException: 第1 行附近出现错误:

无效的表或视图名[ACT_GE_PROPERTY]

下面是我的架构和集成方法:

springboot+druid+mybatisplus和mybatisplus的多数库源框架+activiti7+达梦8;
activiti7框架集成达梦时报错
采用的是复制源码 并在项目中创建相同的文件包这里所有从jar包中copy出来的源码,仍然需要放在一个新建的重复路径下,方便编译的时候覆盖jar中的class文件

首先
org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl这个类,从它的jar包中copy出来,然后在

public static final String DATABASE_TYPE_H2 = "h2";
public static final String DATABASE_TYPE_HSQL = "hsql";
public static final String DATABASE_TYPE_MYSQL = "mysql";
public static final String DATABASE_TYPE_ORACLE = "oracle";
public static final String DATABASE_TYPE_POSTGRES = "postgres";
public static final String DATABASE_TYPE_MSSQL = "mssql";
public static final String DATABASE_TYPE_DB2 = "db2";

下面加上要支持的数据库简称,方便在xml中配置datasourceType

public static final String DATABASE_TYPE_DM = “dm”;

当然还得继续在getDefaultDatabaseTypeMappings()方法中加上如下这句话:

databaseTypeMappings.setProperty(“dm”, DATABASE_TYPE_DM);

接着
接下来,这些配好了,如何映射sql文件呢,请看org.activiti.engine.impl.db.DbSqlSessionFactory类中的initBulkInsertEnabledMap(String databaseType)方法,发现下面有

	// Only Oracle is making a fuss in one specific case right now
    if ("oracle".equals(databaseType)) {
        bulkInsertableMap.put(EventLogEntryEntityImpl.class, Boolean.FALSE);
    }

这样一句代码,而且还标识是oracle独有的,由于我适配的是达梦,所以在这里修改为

	if ("oracle".equals(databaseType) || "dm".equals(databaseType)) {
        bulkInsertableMap.put(EventLogEntryEntityImpl.class, Boolean.FALSE);
    }

还有
org.activiti.engine.impl.AbstractQuery类中也需要把addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)中

		if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_FIRST)) {

            if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)
                    || ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)) {
                orderBy = orderBy + defaultOrderByClause + " NULLS FIRST";
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) {
                orderBy = orderBy + "isnull(" + column + ") desc," + defaultOrderByClause;
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) {
                orderBy = orderBy + "case when " + column + " is null then 0 else 1 end," + defaultOrderByClause;
            } else {
                orderBy = orderBy + defaultOrderByClause;
            }

        } else if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_LAST)) {

            if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)
                    || ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)) {
                orderBy = orderBy + column + " " + sortOrder + " NULLS LAST";
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) {
                orderBy = orderBy + "isnull(" + column + ") asc," + defaultOrderByClause;
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) {
                orderBy = orderBy + "case when " + column + " is null then 1 else 0 end," + defaultOrderByClause;
            } else {
                orderBy = orderBy + defaultOrderByClause;
            }
        }

修改为

       if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_FIRST)) {

            if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)
                    || ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
                    || ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
                orderBy = orderBy + defaultOrderByClause + " NULLS FIRST";
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) {
                orderBy = orderBy + "isnull(" + column + ") desc," + defaultOrderByClause;
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) {
                orderBy = orderBy + "case when " + column + " is null then 0 else 1 end," + defaultOrderByClause;
            } else {
                orderBy = orderBy + defaultOrderByClause;
            }

        } else if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_LAST)) {

            if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)
                    || ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
                    || ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
                orderBy = orderBy + column + " " + sortOrder + " NULLS LAST";
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) {
                orderBy = orderBy + "isnull(" + column + ") asc," + defaultOrderByClause;
            } else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) {
                orderBy = orderBy + "case when " + column + " is null then 1 else 0 end," + defaultOrderByClause;
            } else {
                orderBy = orderBy + defaultOrderByClause;
            }
        }
回答 0
暂无回答
扫一扫
联系客服