Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate结果转换器无法实例化resultclass_Java_Sql_Hibernate - Fatal编程技术网

Java Hibernate结果转换器无法实例化resultclass

Java Hibernate结果转换器无法实例化resultclass,java,sql,hibernate,Java,Sql,Hibernate,我有一个要映射到类的SQL查询。我使用Hibernate的createSQLQuery,然后对我想映射到的类使用一个结果转换器。但是Hibernate抛出了这个错误: ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/mypackage].[MyPackageServlet]] Servlet.service() for servlet MyPackageServlet threw exception

我有一个要映射到类的SQL查询。我使用Hibernate的createSQLQuery,然后对我想映射到的类使用一个结果转换器。但是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();
Query Query=this.getSession().createSQLQuery(sql)
.addScalar(“策略”,Hibernate.STRING)
.addScalar(“memberName”,Hibernate.STRING)
.addScalar(“高级”,Hibernate.BIG_DECIMAL)
.addScalar(“生效日期”,Hibernate.DATE)
.addScalar(“newOrRenewal”,Hibernate.CHARACTER)
.addScalar(“auditPayment”,Hibernate.BIG_DECIMAL)
.addScalar(“AuditReceiveable”,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\u DECIMAL)
.addScalar(“totalPaid”,Hibernate.BIG_DECIMAL)
.addScalar(“月”,Hibernate.STRING)
.addScalar(“分期”,Hibernate.STRING)
.setResultTransformer(新别名为BeanResultTransformer(MonthlyReport.class));
List monthlyReport=query.setString(“月”,月)
.setString(“起始日期”,月+“/”+cal.getActualMinimum(日历日,月中日)+“/”+年)
.setString(“endPayDate”,month+“/”+cal.getActualMaximum(日历日,月日)+“/”+年)
.setString(“基金年”,基金年)
.list();

非常感谢您的帮助。我继承了这个项目,以前从未使用过Java或Hibernate,这是一个很大的代码库。这很可能是我犯的一个新手错误。

事实上,只有当实例化的类不是内部类时,才能执行此实例化

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


希望这有点帮助:)

MonthlyReport是内部类吗?MonthlyReportContext$MonthlyReport?是的,它是一个内部类。我不确定Hibernate如何处理内部类,我会将其作为外部类,如果可能的话,尝试使用。静态和公共