Hibernate Result Transformer无法实例化resultClass [英] Hibernate Result Transformer cannot instantiate resultclass

查看:59
本文介绍了Hibernate Result Transformer无法实例化resultClass的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要映射到一个类的SQL查询.我正在使用Hibernate的createSQLQuery,然后将Result Transformer用于要映射到的类.但是Hibernate抛出此错误:

I have a SQL query that I want to map to a class. I'm using Hibernate's createSQLQuery and then using a Result Transformer for the class I'd like to map to. But Hibernate is throwing this error:

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,并且为空.不知道我还要在这里做什么?

From what I can tell, this means my constructor is wrong. It's set to public, and it's empty. Not sure what else I need to do here?

public class MonthlyReport
{
       /**  Some private properties defined here **/
       public MonthlyReport(){}  
       /** setters and getters for all properties here **/
    }           

从pgadmin运行时,SQL查询工作正常.在这里,我使用addScalar设置了所有字段,因为类属性是camelCased.然后我使用setResultTransformer:

The SQL query works fine when run from pgadmin. Here, I set all the fields with addScalar since the class properties are camelCased. Then I use 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,这是一个很大的代码库.这很可能是我正在犯的菜鸟错误.

Any help is greatly appreciated. I inherited this project and have never worked with Java or Hibernate before, and this is a large codebase. This could well be a rookie mistake I'm making.

推荐答案

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

Indeed, this instantiation can be done only when the instantiated class is not an inner class...

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

You can either refactor the inner class into a normal class or make it static.

希望这会有所帮助:)!

Hope this helps a little :)!

这篇关于Hibernate Result Transformer无法实例化resultClass的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆