Hibernate Result Transformer无法实例化resultclass

时间:2013-02-04 16:17:16

标签: java sql hibernate

我有一个我要映射到类的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 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,这是一个很大的代码库。这可能是我正在犯的一个新手错误。

1 个答案:

答案 0 :(得分:9)

实际上,只有当实例化的类不是内部类时才能进行此实例化...

您可以将内部类重构为普通类,也可以将其重置为静态类。

希望这有点帮助:)!