1

休眠 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]
  1. 为什么这个类会抛出异常,因为 criteria.setProjection(pl)返回标准,然后 Criteria 返回相同的列表。
  2. 如何动态控制这个?

让我知道 !

4

1 回答 1

0

您正在设置要请求的投影idisoCode因此结果是索引为 0 和索引为 1 的Object数组列表。idisoCode

尝试将每个结果转换为Object[]并检查数组的内容。

于 2013-10-08T03:11:02.170 回答