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 に答える
0

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

于 2012-04-30T06:11:17.127 に答える
0

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

于 2015-06-28T17:45:01.027 に答える