2012-04-30 41 views
10

Mã nguồn của tôi như dưới đây. Nó có một lỗi, "Không có ngoại lệ loại DataAccessException có thể được ném; một loại ngoại lệ phải là một lớp con của Throwable".Không có ngoại lệ loại DataAccessException có thể được ném; loại ngoại lệ phải là một lớp con của Throwable

Tôi không thể hiểu tại sao lỗi ocurrs. cho tôi biết. cám ơn.

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

} 

Trả lời

0

Điều này có nghĩa là trong phương pháp getUserInfo() của bạn không có mã nào ném ngoại lệ đó. Vì vậy, chỉ cần xóa mệnh đề throws khỏi tuyên bố phương pháp của bạn.

+0

Nếu tôi loại bỏ nó, lỗi khác "Đã xảy ra ngoại lệ không tuân thủ DataAccessException". – verystrongjoe

+0

sau đó, tôi gói nó với try ~ catch statement. nhưng một lỗi khác "Không ngoại lệ loại DataAccessException có thể được ném, một loại ngoại lệ phải là một phân lớp của Throwable" ouccred. – verystrongjoe

+0

Tôi nghĩ rằng câu trả lời khác có lẽ là những gì bạn đang tìm kiếm sau đó, hãy chắc chắn rằng DataAccessException của bạn là giống nhau trong phương thức được gọi như trong phương thức gọi. –

2

DataAccessException của bạn không phải là lớp con của lớp Throwable (mở rộng Throwable). Nó sẽ được, và không có thừa kế này, mã của bạn không phải là compilable với điều khoản ném hiện tại.

Dưới đây là ví dụ: http://www.osix.net/modules/article/?id=754

+0

Tôi tự hỏi sự khác biệt giữa một lớp mở rộng Throwable và một lớp con của lớp con. Và nếu ngoại lệ đó xảy ra lỗi không phải là một phân lớp của Throwable, Làm thế nào tôi có thể xử lý vấn đề này? – verystrongjoe

+0

Tôi đã đuổi theo các lớp siêu dữ liệu của DataAccessException. Và nó mở rộng Java.lang.Excpetion. – verystrongjoe

+1

Thật kỳ quặc. Theo chủ đề này (câu trả lời đầu tiên): http://stackoverflow.com/questions/2416980/configurationexception-in-java, nếu lớp cha bị thiếu từ classpath, bạn có thể nhận được ngoại lệ này. –

20

Điều này có thể xảy ra nếu một số loại phân cấp của ngoại lệ không nằm trên đường dẫn lớp. Trong trường hợp đó, nó không thể xác minh liệu ngoại lệ có thực sự mở rộng Throwable hay không, cho dù đó là một kiểm tra hay không, vv Do đó các lỗi. ví dụ: superclass của Dataaccessexception: NestedRuntimeException có thể bị thiếu trong đường dẫn lớp vì nó nằm trong một bình khác nhau, tức là lõi lò xo.

0

Tôi đã gặp phải sự cố tương tự. Những gì tôi đã làm sai là tôi đã tạo ra lớp Ngoại lệ (do nhầm lẫn) của riêng tôi. Trong các chương trình khác tôi đã cố gắng để mở rộng lớp ngoại lệ (mặc định) nhưng complier (nhật thực) đang tải người dùng định nghĩa lớp ngoại lệ cho tôi cùng một lỗi. Vì vậy, hãy đảm bảo bạn không ghi đè bất kỳ lớp mặc định nào.

Các vấn đề liên quan