我有一个要映射到一个类的SQL查询。我正在使用Hibernate的createSQLQuery,然后将Result Transformer用于要映射到的类。但是Hibernate抛出此错误:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/mypackage].[MyPackageServlet]] Servlet.service() for servlet MyPackageServlet threw exception org.hibernate.HibernateException: Could not instantiate resultclass: com.myapp.mypackage.context.report.MonthlyReportContext$MonthlyReport at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:69)
据我所知,这意味着我的构造函数是错误的。它设置为public,并且为空。不知道我还要在这里做什么?
public class MonthlyReport { /** Some private properties defined here **/ public MonthlyReport(){} /** setters and getters for all properties here **/ }
从pgadmin运行时,SQL查询工作正常。在这里,我使用addScalar设置了所有字段,因为类属性是camelCased。然后,我使用setResultTransformer:
Query query = this.getSession().createSQLQuery(sql) .addScalar("policy", Hibernate.STRING) .addScalar("memberName", Hibernate.STRING) .addScalar("premium", Hibernate.BIG_DECIMAL) .addScalar("effectiveDate", Hibernate.DATE) .addScalar("newOrRenewal", Hibernate.CHARACTER) .addScalar("auditPayment", Hibernate.BIG_DECIMAL) .addScalar("auditRecieveable", Hibernate.BIG_DECIMAL) .addScalar("associationDues", Hibernate.BIG_DECIMAL) .addScalar("expenseConstant", Hibernate.BIG_DECIMAL) .addScalar("nsfFees", Hibernate.BIG_DECIMAL) .addScalar("lossControl", Hibernate.BIG_DECIMAL) .addScalar("premiumPayment", Hibernate.BIG_DECIMAL) .addScalar("totalPaid", Hibernate.BIG_DECIMAL) .addScalar("month", Hibernate.STRING) .addScalar("installment", Hibernate.STRING) .setResultTransformer(new AliasToBeanResultTransformer(MonthlyReport.class)); List<MonthlyReport> monthlyReport = query.setString("month", month) .setString("startPayDate", month + "/" + cal.getActualMinimum(Calendar.DAY_OF_MONTH) + "/" + year) .setString("endPayDate", month + "/" + cal.getActualMaximum(Calendar.DAY_OF_MONTH) + "/" + year) .setString("fundYear", fundYear) .list();
任何帮助是极大的赞赏。我继承了这个项目,之前从未使用过Java或Hibernate,这是一个很大的代码库。这很可能是我犯的菜鸟错误。
确实,只有当实例化的类不是内部类时,才能进行此实例化。
您可以将内部类重构为普通类,也可以使其变为静态。
希望这有所帮助 :)!