如何在hibernate泛型中删除未经检查的赋值警告

时间:2015-12-24 04:18:37

标签: java hibernate generics

我正在使用以下代码实现泛型访问hibernate中的数据:

public static <T> List<T> get(Class<T> clazz,Map map) throws GenericDataAccessException {
        List<T> data = null;
        Session session = null;
        try {
            session = HibernateUtilities.getSession();
            session.beginTransaction();
            Criteria cr = session.createCriteria(clazz.getName());
            Iterator itr  = map.entrySet().iterator();
            while(itr.hasNext()){
                Map.Entry entry = ( Map.Entry)itr.next();
                cr.add(Restrictions.eq(entry.getKey().toString(),entry.getValue()));
            }
            data = cr.list();
        } catch (Exception e) {
            logger.debug("Hibernate Error::" +  e.toString());
            throw new GenericDataAccessException(e.getMessage());
        } finally {
            if(session != null) {
                session.close();
            }
        }
        return data;
    }

但是在data = cr.list();行显示未经检查的分配警告。如何删除此警告而不禁止警告? 如果我将返回类型从通用列表更改为列表,则会删除警告但在这种情况下,我会在调用此方法的类中收到警告。

1 个答案:

答案 0 :(得分:1)

首先,您的代码中存在一些问题

  1. 您不会提交和回滚交易。
  2. 您不需要在低级方法中记录异常,只需重新抛出即可。
  3. 如果您记录异常,则应该这样做

    logger.debug("Hibernate Error", e);

  4. 您应该以这种方式重新抛出异常

    throw new GenericDataAccessException(e);

  5. 您不需要data只需

    return cr.list();

  6. 无法删除&#34;未选中的作业&#34;警告,因为Criteria有一个list()声明,其返回类型为List而不是List<?>

    List list() throws HibernateException;
    

    所以只需使用@TimBiegeleisen @SuppressWarnings("unchecked")建议。但只在一个低级别的地方!不高于各种get()方法。因此,您需要使用一种get()方法来构建更复杂的泛型体系结构。