休眠 3x + Spring MVC 3x
第1部分
通用方法
// getAll
@SuppressWarnings("unchecked")
public <T> List<T> getAll(Class<T> entityClass) throws DataAccessException {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(entityClass);
return criteria.list();
}
在控制器中获取列表
List<GenCurrencyModel> currencyList=pt.getAll(GenCurrencyModel.class);
测试
System.out.println("Type: "+currencyList.get(0).getClass());
System.out.println("Value: "+((GenCurrencyModel)currencyList.get(0)).getId());
结果
Type: class com.soft.erp.gen.model.GenCurrencyModel
Value: 1
第2部分
通用方法的变化[使用投影]
@SuppressWarnings("unchecked")
public <T> List<T> getAll(Class<T> entityClass, String[] nameList) throws DataAccessException {
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(entityClass);
ProjectionList pl = Projections.projectionList();
for (int i=0; i<nameList.length; i++) {
pl.add(Projections.property(nameList[i].toString()));
}
criteria.setProjection(pl);
return criteria.list();
}
在控制器中获取列表
String []list={"id","isoCode"};
List<GenCurrencyModel> currencyList=pt.getAll(GenCurrencyModel.class,list);
测试
System.out.println("Type: "+currencyList.get(0).getClass());
System.out.println("Value: "+((GenCurrencyModel)currencyList.get(0)).getId());
结果 [java.lang.ClassCastException]
nested exception is java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.soft.erp.gen.model.GenCurrencyModel]
- 为什么这个类会抛出异常,因为 criteria.setProjection(pl)返回标准,然后 Criteria 返回相同的列表。
- 如何动态控制这个?
让我知道 !