Dar*_*wly 3 java hibernate criteria restrictions hibernate-criteria
正如问题标题所说,我试图制作一个投影标准,只查询几个表属性.
所以我有一个Person Table /类,它有大约40个属性.我希望我的标准获得动态数量的属性,比如10,11或12(SQL术语select firstname, lastname from person),我这样做:
Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
crit.setCacheable(true);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"));
Criterias c = null;
for (int i = 0; i < checked.size(); i++) {
Attribute attr = checked.elementAt(i);
switch (attr) {
case LASTNAME:
projList.add(Projections.property("lastName"));
c = enumMap.get(attr);
if (c.isChanged()) {
String tmp = (String) c.getAnswer();
tmp = tmp.replace('*', '%');
crit.add(Restrictions.like("lastName", tmp));
crit.addOrder(Order.asc("lastName"));
}
case ...THE REST .....
}
crit.setProjection(projList);
retList = crit.list();
tx.commit();
return retList;
Run Code Online (Sandbox Code Playgroud)
并且它返回retList元素不是来自Person.class:
INFO [AWT-EventQueue-0](UserGroupManagerApp.java127) - [Ljava.lang.Object; @ 14b9b80
FATAL [AWT-EventQueue-0](Login.java78) - java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为usergroupmanager.model.db.Person java.lang.ClassCastException:[Ljava.lang.Object; 无法强制转换为usergroupmanager.model.db.Person
请帮助,现在我列出所有40+ attr,它占用查询时间,我不喜欢它.我也在寻找一种可以帮助我解决这个问题的替代解决方案.我读过ResultTransformer但在我的情况下还没有找到如何使用它.
你可以使用criteria.setResultTransformer()
Hibernate中提供了一些变形金刚.如果您的人没有任何关联,请使用此:
criteria.setResultTransformer(Transformers.aliasToBean(Person.class));
Run Code Online (Sandbox Code Playgroud)
但如果Person有任何关联,请考虑在http://github.com/moesio/seimos上使用Seimos
如果您使用它而不是Criteria,可以保存很多代码.
| 归档时间: |
|
| 查看次数: |
9729 次 |
| 最近记录: |