也不会抛出DataAccessException类型的异常;异常类型必须是Throwable的子类

时间:2012-04-30 06:07:04

标签: exception exception-handling

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

我无法理解错误发生的原因。 让我知道。 THX。

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;
    }

}

5 个答案:

答案 0 :(得分:22)

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

答案 1 :(得分:2)

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

以下是一个示例:http://www.osix.net/modules/article/?id=754

答案 2 :(得分:0)

这意味着在您的getUserInfo()方法中没有抛出该异常的代码。所以只需从方法声明中删除throws子句。

答案 3 :(得分:0)

我遇到了同样的问题。 我做错了是因为我创建了自己的异常类(错误)。 在其他程序中,我试图扩展Exception类(默认)但是complier(eclipse)正在加载用户定义的Exception类,给出了同样的错误。 因此,请确保您没有覆盖任何默认类。

答案 4 :(得分:0)

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