Reputation: 227
How to assign selected column values from Hibernate Criteria to bean class? When I try to assign the values to bean, it giving me the following error:
ProjectionList cannot be cast to org.hibernate.Criteria.
Please see my code below which is getting that error:
Criteria criteria = session.createCriteria(PartFeatureVersion.class,"pfv");
criteria.createAlias("pfv.part", "p");
criteria.createAlias("pfv.featureVersion", "fv");
criteria.createAlias("pfv.dateRange", "d");
criteria.createAlias("fv.feature", "f");
criteria.setProjection((Projection) ((Criteria) Projections.projectionList()
.add(Projections.property("f.name"))
.add(Projections.property("fv.versionName"))
.add(Projections.property("d.startDate"))
.add(Projections.property("d.endDate"))
.add(Projections.property("fv.featureVersionId")))
.setResultTransformer(Transformers.aliasToBean(FeatureSearchResult.class)));
criteria.add(Restrictions.eqProperty("pfv.part.id","p.partId"));
criteria.add(Restrictions.eqProperty("pfv.featureVersion.id","fv.featureVersionId"));
criteria.add(Restrictions.eqProperty("pfv.dateRange.id","d.dateRangeId"));
criteria.add(Restrictions.eqProperty("fv.feature.id","f.featureId"));
criteria.add(Restrictions.eq("p.partNbr", partNo));
List list = criteria.list();
Iterator it = list.iterator();
while(it.hasNext())
{
FeatureSearchResult feature = (FeatureSearchResult)it.next();
System.out.println(feature.getName());
System.out.println(feature.getVersionName());
}
Upvotes: 3
Views: 2879
Reputation: 18383
Rewrite criteria.setProjection()
code as:
criteria.setProjection(Projections.projectionList()
.add(Projections.property("f.name").as("name"))
.add(Projections.property("fv.versionName").as("versionName"))
.add(Projections.property("d.startDate").as("startDate"))
.add(Projections.property("d.endDate").as("endDate"))
.add(Projections.property("fv.featureVersionId").as("featureVersionId")));
criteria.setResultTransformer(Transformers.aliasToBean(FeatureSearchResult.class));
and FeatureSearchResult
is declared as (just an example, surely will differs from real definition):
class FeatureSearchResult {
String name;
String versionName;
Date startDate;
Date endDate;
String featureVersionId;
// Add getter/setter
}
as()
method invocation is used put source property into the right FeatureSearchResult
's property.
I hope I was clear, English is not my native language.
Upvotes: 3