繁体   English   中英

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

[英]How to remove unchecked assignment warning in hibernate generics

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

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. 您不提交和回滚事务。
  2. 您不需要在低级方法中记录异常,只需重新抛出它即可。
  3. 如果你记录一个异常,你应该这样做

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

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

    throw new GenericDataAccessException(e);

  5. 你不需要data就做

    return cr.list();

无法删除“未经检查的赋值”警告,因为Criteria有一个list()声明,其返回类型为List而不是List<?>

List list() throws HibernateException;

所以只需使用@TimBiegeleisen @SuppressWarnings("unchecked") 却只在一处低处! 不是所有类型的get()方法。 因此,您需要使用一个get()方法来构建更复杂的泛型架构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM