作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下代码实现泛型以访问 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();
行显示未检查的分配警告。如何在不抑制警告的情况下删除此警告?如果我将返回类型从通用列表更改为列表,则会删除警告,但在这种情况下,我会在类中从调用此方法的地方收到警告。
最佳答案
首先,你的代码有一些问题
如果你记录一个异常,你应该这样做
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()
方法。
首先,您可以在单独的实用程序方法中分开使用 session 和事务。像这样的东西 HibernateSessionFactory#doInTransaction() .
第二步是在请求方法之外配置请求参数(类似于您的 map
),如下所示 HibernateRequest#list() .
关于java - 如何删除 hibernate 泛型中未经检查的分配警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447192/
我是一名优秀的程序员,十分优秀!