web-dev-qa-db-ja.com

タイプDataAccessExceptionの例外をスローすることはできません。例外タイプはThrowableのサブクラスである必要があります

以下のような私のソースコード。 「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;
    }

}
11
verystrongjoe

これは、例外の型階層内の一部のクラスがクラスパス上にない場合に発生する可能性があります。その場合、例外が本当にThrowableを拡張するかどうか、チェックされているかどうかなどを確認することはできません。したがって、エラーが発生します。例:Dataaccessexceptionのスーパークラス:NestedRuntimeExceptionは、別のjar、つまりスプリングコアにあるため、クラスパスから欠落している可能性があります。

23
manoj mokashi

DataAccessExceptionはThrowableクラスのサブクラスではありません(Throwableを拡張します)。そうあるべきであり、この継承がないと、コードは現在のthrows句でコンパイルできません。

ここに例があります: http://www.osix.net/modules/article/?id=754

2
Gergely Bacso

5.X.Xバージョンにアップグレードしたときにも同じ問題が発生しました。 Spring-core.jarファイルを追加しましたが、問題なく動作しました。誰かを助けるかもしれないので、ここにこれを追加するだけです。 Spring txn jar、dao jar、springcoreは必須です。

1
JAVA_CAT

私は同じ問題に直面していました。私が間違ったことは、自分でExceptionクラスを(誤って)作成したことです。他のプログラムでは、Exceptionクラス(デフォルト)を拡張しようとしましたが、complier(Eclipse)がユーザー定義のExceptionクラスをロードしていて、同じエラーが発生しました。したがって、デフォルトのクラスをオーバーライドしていないことを確認してください。

0
sky

これは、getUserInfo()メソッドに、その例外をスローするコードがないことを意味します。したがって、メソッド宣言からthrows句を削除するだけです。

0