以下のような私のソースコード。 「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;
}
}
これは、例外の型階層内の一部のクラスがクラスパス上にない場合に発生する可能性があります。その場合、例外が本当にThrowableを拡張するかどうか、チェックされているかどうかなどを確認することはできません。したがって、エラーが発生します。例:Dataaccessexceptionのスーパークラス:NestedRuntimeExceptionは、別のjar、つまりスプリングコアにあるため、クラスパスから欠落している可能性があります。
DataAccessExceptionはThrowableクラスのサブクラスではありません(Throwableを拡張します)。そうあるべきであり、この継承がないと、コードは現在のthrows句でコンパイルできません。
ここに例があります: http://www.osix.net/modules/article/?id=754
5.X.Xバージョンにアップグレードしたときにも同じ問題が発生しました。 Spring-core.jarファイルを追加しましたが、問題なく動作しました。誰かを助けるかもしれないので、ここにこれを追加するだけです。 Spring txn jar、dao jar、springcoreは必須です。
私は同じ問題に直面していました。私が間違ったことは、自分でExceptionクラスを(誤って)作成したことです。他のプログラムでは、Exceptionクラス(デフォルト)を拡張しようとしましたが、complier(Eclipse)がユーザー定義のExceptionクラスをロードしていて、同じエラーが発生しました。したがって、デフォルトのクラスをオーバーライドしていないことを確認してください。
これは、getUserInfo()
メソッドに、その例外をスローするコードがないことを意味します。したがって、メソッド宣言からthrows
句を削除するだけです。