2013-02-17 26 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