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)

しかし、必要なコンストラクターを宣言しましたが、これを除いて、params の数と型が異なる他のツリー コンストラクターが宣言されており、params コンストラクターもありません。

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

確認する価値のある2つのこと。1. PaymentType の完全修飾名を使用してみてください

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

2. また、エンティティOrderの ID がLongなどではなくint/integerであることを確認します。

于 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. PaymentTypeとの両方がOrder実装されていることを確認してくださいjava.io.Serializable

于 2013-02-17T03:25:16.613 に答える