编程语言
首页 > 编程语言> > java-Hibernate:org.hibernate.criterion.ProjectionList无法转换为org.hibernate.Criteria

java-Hibernate:org.hibernate.criterion.ProjectionList无法转换为org.hibernate.Criteria

作者:互联网

如何从Hibernate Criteria中将选定的列值分配给bean类?当我尝试将值分配给bean时,出现以下错误:

ProjectionList cannot be cast to org.hibernate.Criteria.

请查看下面的我的代码,该错误信息如下:

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());

                }

解决方法:

将criteria.setProjection()代码重写为:

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));

并将FeatureSearchResult声明为(仅作为示例,肯定会与实际定义有所不同):

class FeatureSearchResult {
  String name;
  String versionName;
  Date startDate;
  Date endDate;
  String featureVersionId;

  // Add getter/setter
}

使用as()方法调用将源属性放入正确的FeatureSearchResult的属性中.

我希望我很清楚,英语不是我的母语.

标签:orm,hibernate,hibernate-criteria,java
来源: https://codeday.me/bug/20191122/2058386.html