11

我的源代码如下。它有一个错误,“不能抛出 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;
    }

}
4

5 回答 5

23

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

于 2012-07-25T11:46:00.097 回答
2

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

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

于 2012-04-30T06:14:41.037 回答
1

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

于 2019-03-18T12:16:34.900 回答
0

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

于 2012-04-30T06:11:17.127 回答
0

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

于 2015-06-28T17:45:01.027 回答