【问题标题】:How to remove unchecked assignment warning in hibernate generics如何在休眠泛型中删除未经检查的赋值警告
【发布时间】:2016-11-18 20:30:41
【问题描述】:

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

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(); 行显示未检查分配警告。如何在不抑制警告的情况下删除此警告? 如果我将返回类型从通用列表更改为列表,则会删除警告,但在这种情况下,我会在调用此方法的类中收到警告。

【问题讨论】:

  • 您可以将@SuppressWarnings("unchecked") 放在您的get() 方法之上。但请记住,如果有警告,您很可能在运行时出错。所以实际上你的问题是双重的:如何禁用警告,以及如何应对潜在的随之而来的错误。
  • @Tim Biegeleisen 感谢您的回复,但我不想抑制警告我想用我的代码实现来处理它。有没有其他方法可以让我在没有警告的情况下实现这个方法?
  • 如果您想这样做,您需要为您在方法中提到的所有内容提供适当的泛型类型,包括MapIteratorMap.Entry
  • @LouisWasserman 谢谢。但是这里的 map 和 iterator 仅用于设置标准和限制,那么它将如何影响 cr.list() 的返回类型?

标签: java hibernate generics


【解决方案1】:

首先,你的代码有一些问题

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

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

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

    throw new GenericDataAccessException(e);

  5. 你不需要data就行了

    return cr.list();

无法删除“未检查分配”警告,因为 Criteria 有一个 list() 声明,返回类型为 List 而不是 List&lt;?&gt;

List list() throws HibernateException;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多