0

我有 HQL 查询

select new PaymentType(o.paymentType.idPaymentType) from Order as o where o.user='1'

它抛出以下异常

org.hibernate.PropertyNotFoundException: no appropriate constructor in class: PaymentType
    at org.hibernate.util.ReflectHelper.getConstructor(ReflectHelper.java:187)
    at org.hibernate.hql.classic.QueryTranslatorImpl.renderSQL(QueryTranslatorImpl.java:631)
    at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:220)
    at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:185)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)

但是我已经声明了必需的构造函数,除此之外,还声明了其他具有不同数量和类型的参数的树构造函数,也没有参数构造函数。

public PaymentType(Integer idPaymentType) {
    this.idPaymentType = idPaymentType;
}

编辑:

public class Order  implements java.io.Serializable {


     private Integer idOrder;
     private PaymentType paymentType;
     private DeliveryType deliveryType;
     ...
}
4

2 回答 2

1

two things worth to check. 1.try use a fully qualified name of PaymentType

select new com.company.xxx.PaymentType(o.paymentType.idPaymentType)

2.also make sure the id in entity Order is int/integer rather than Long or something else.

于 2013-02-17T02:36:45.027 回答
0

在使用 Hibernate 之前,我已经看到了这个异常。据我回忆,它要么与没有无参数构造函数、没有公共访问权限的无参数构造函数有关,要么与您的实体类不可序列化有关。

尝试以下操作:

  1. 确保你在PaymentType类中有这些构造函数:

    /** 
     * Default, parameter-less constructor
     */
    public PaymentType() {
    }
    
  2. 还有Order

    /** 
     * Default, parameter-less constructor
     */
    public Order() {
    }
    
  3. 确保两者PaymentTypeOrder执行java.io.Serializable

于 2013-02-17T03:25:16.613 回答