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