我有很多这种类型的方法:
public static List<EduUsers> getDetails(Class c, Map<String, Integer> params) {
List<EduUsers> details = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Criteria cr = session.createCriteria(c);
for (Map.Entry<String, Integer> entry : params.entrySet()) {
cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
}
details = cr.list();
tx.commit();
} catch (Exception asd) {
log.debug(asd.getMessage());
if (tx != null) {
tx.commit();
}
} finally {
session.close();
}
return details;
}
我正在尝试为他们提供通用方法,这是我到目前为止编写的内容:
public static <T> List<T> getDetails(Class<T> c, Class<T> b) {
List<T> details = null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Criteria cr = session.createCriteria(c);
//am stuck on iteration of the map from Class T b
details = cr.list();
tx.commit();
} catch (Exception asd) {
log.debug(asd.getMessage());
if (tx != null) {
tx.rollback();
}
} finally {
session.close();
}
return details;
}
如何在方法上放置通用Map?
编辑:我的地图值类型可以更改,我不仅需要放置整数,还需要放置字符串以及其他类型
最佳答案
要使用通用地图,您应该定义方法,以允许具有任何对象类型的Map传递到Map的Value位置。
您的新方法应如下所示:getDetails(Class<T> c,Map<String,?> params)
并且Map Entry迭代器应如下所示:
for (Map.Entry<String, Object> entry : params.entrySet()) {
cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
}