【问题标题】:No exception of type DataAccessException can be thrown; an exception type must be a subclass of Throwable不能抛出 DataAccessException 类型的异常;异常类型必须是 Throwable 的子类
【发布时间】:2019-03-18 20:16:34
【问题描述】:

我的源代码如下。 它有一个错误,“不能抛出 DataAccessException 类型的异常;异常类型必须是 Throwable 的子类”。

我不明白为什么会出现错误。 让我知道。谢谢。

package com.sds.afi.cosmos.cmm.db.impl;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.sds.afi.cosmos.cmm.db.MainDao;

@Repository
//@SuppressWarnings("unchecked")   // 부적절한 컴파일러의 경고를 제거
public class MainDaoImpl extends SqlMapClientDaoSupport  implements MainDao {

    @Autowired
    private SqlMapClientTemplate sqlMapClientTemplate;

    @SuppressWarnings("unchecked")
    @Override
    public List<HashMap> getUserInfo() throws DataAccessException {

        List<HashMap> lists;

        lists = sqlMapClientTemplate.queryForList("common.getList");

        return lists;
    }

}

【问题讨论】:

    标签: exception exception-handling


    【解决方案1】:

    如果异常的类型层次结构中的某些类不在类路径上,则可能会发生这种情况。在这种情况下,无法验证异常是否真的扩展了 Throwable,它是否是已检查的,等等。因此出现了错误。例如 Dataaccessexception 的超类:类路径中可能缺少 NestedRuntimeException,因为它位于不同的 jar 中,即 spring-core。

    【讨论】:

      【解决方案2】:

      您的 DataAccessException 不是 Throwable 类的子类(扩展 Throwable)。它应该是,如果没有这种继承,你的代码就不能用当前的 throws 子句编译。

      这是一个例子:http://www.osix.net/modules/article/?id=754

      【讨论】:

      • 我想知道扩展 Throwable 的类和子类的子类之间的区别。如果发生错误的那个异常不是Throwable的子类,我该如何处理这个问题?
      • 我追逐了我的 DataAccessException 的超类。它扩展了 Java.lang.Excpetion。
      • 这很奇怪。根据这个线程(第一个答案):stackoverflow.com/questions/2416980/…,如果类路径中缺少超类,您可能会收到此异常。
      【解决方案3】:

      当我升级到 5.X.X 版本时,我遇到了同样的问题。我添加了 Spring-core.jar 文件,它对我来说效果很好。只需在此处添加此内容,因为它可能对某些人有所帮助。 Spring txn jar , dao jar 和 spring core 是必须的。

      【讨论】:

        【解决方案4】:

        这意味着在您的getUserInfo() 方法中没有引发该异常的代码。因此,只需从方法声明中删除 throws 子句即可。

        【讨论】:

        • 如果我摆脱它,另一个错误“Unhandled exception type DataAccessException”发生了。
        • 然后,我用 try~catch 语句包装了它。但出现另一个错误“不能抛出 DataAccessException 类型的异常;异常类型必须是 Throwable 的子类”。
        • 我认为另一个答案可能就是您正在寻找的答案,请确保您的 DataAccessException 在被调用方法中与调用方法中的相同。
        【解决方案5】:

        我遇到了同样的问题。 我做错了什么是我自己创建了异常类(错误地)。 在其他程序中,我试图扩展异常类(默认),但编译器(eclipse)正在加载用户定义的异常类,给我同样的错误。 所以请确保你没有覆盖任何默认类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-28
          • 2021-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多