2013-02-17 83 views
0

我HQL查询Hibernate的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; 
    ... 
} 

回答

0

两件事情值得去检查。 1.try使用PaymentType

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

的全名2.also确保ID在实体订单INT /整数而不是或别的东西。

+0

感谢您的建议。 #1不工作。 #2如何获得'o.paymentType.idPaymentType'类型。 – misco 2013-02-17 02:44:34

+0

你可以附上Order.java的代码吗?我假设有一个名为** paymentType **的字段。 ** PaymentType.java **中的** idPaymentType **字段的类型是什么? – spiritwalker 2013-02-17 02:54:33

+0

我编辑了它。 PaymentType的'idPaymentType'是'Integer'。 – misco 2013-02-17 03:00:48

0

我在使用Hibernate之前就已经看到了这个异常。根据我的记忆,它可能与不具有无参数构造函数,无参数构造函数没有公共acccess或实体类不可序列化有关。

尝试以下操作:

  1. 请确保您有在PaymentType类这些构造函数:

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

    /** 
    * Default, parameter-less constructor 
    */ 
    public Order() { 
    } 
    
  3. 确保两个PaymentTypeOrder实施java.io.Serializable

+0

我检查了你的笔记。一切都被定义了,我绝对不明白。 – misco 2013-02-17 03:34:26

+0

@misco是您的类“PaymentType”公共? – 2013-02-17 03:47:34

+0

是的,它是公开的。我可以对所有字段PaymentType进行HQL查询,但是我只想为'Order'获取'IdPaymentType'。 – misco 2013-02-17 04:17:51