[英]How to wrapper Hibernate session API avoid of “unchecked” generics warning
[英]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();
显示未经检查的分配警告。 如何在不抑制警告的情况下删除此警告? 如果我将返回类型从泛型列表更改为列表,则会删除警告,但在这种情况下,我会在类中从调用此方法的地方收到警告。
首先,您的代码存在一些问题
如果你记录一个异常,你应该这样做
logger.debug("Hibernate Error", e);
您应该以这种方式重新抛出异常
throw new GenericDataAccessException(e);
你不需要data
就做
return cr.list();
无法删除“未经检查的赋值”警告,因为Criteria
有一个list()
声明,其返回类型为List
而不是List<?>
。
List list() throws HibernateException;
所以只需使用@TimBiegeleisen @SuppressWarnings("unchecked")
。 却只在一处低处! 不是所有类型的get()
方法。 因此,您需要使用一个get()
方法来构建更复杂的泛型架构。
首先,您可以在单独的实用程序方法中单独使用会话和事务。 像这样的HibernateSessionFactory#doInTransaction() 。
第二步是在请求方法(类似于您的map
)之外配置请求参数,例如HibernateRequest#list() 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.