2016-05-20 9 views
3

WHERE句のIDを使用してデータベースからUSERを取得しようとしています。しかし、私はエラーを受け取り、私のプログラムは失敗しています。エラー:パラメータ値が期待値と一致しません

これは私が私のプログラムを実行すると、私は受けてるのエラーです:

ERROR [org.jboss.as.ejb3.invocation] (default task-19) 
JBAS014134: EJB Invocation failed on component CustomerServiceBeanImpl 
for method public abstract package.name.entity.ICustomer 
package.name.bean.CustomerServiceBean.getCustomerById(long): 
javax.ejb.EJBException: java.lang.IllegalArgumentException: 
Parameter value [19533] did not match expected type [package.name.entity.User (n/a)] 

注:[19533]は、私が使用したテスト値です。

これはCustomerServiceBeanImpl.javaでエラーをしている方法である:名前クエリがある

public static Customer getById (final EntityManager em, final long id) 
{ 
    for (final Customer c : em.createNamedQuery ("Customer.getById", Customer.class) 
    .setParameter ("id", id).setMaxResults (1).getResultList()) 
    { 
     return c; 
    } 
    return null; 
} 

@Override 
public Customer getCustomerById (final long id) 
{ 
    return Customer.getById (this.em, id); 
} 

これは、コンポーネントCustomerServiceBeanImplによって呼び出されています方法であり、 this:

@NamedQuery (name = "Customer.getById", 
query = "SELECT o FROM gnf.Customer o WHERE o.user = :id") 

お客様の声.javaクラス自体は、関連する列は、このいずれかになります。

@ManyToOne (fetch = FetchType.LAZY) 
@JoinColumn (name = "user_id") 
private User   user; 

私のERDのクイックチェックをやって、私の「顧客」テーブルの「ID」欄には、BIGINTのデータ型を持っています。しかし、私はそれが重要かどうか分からない。 (途中でPostgreSQLデータベース)

どうすればこのエラーを修正できますか?

答えて

8

名前付きクエリのWHERE句が問題のようです。 Customer.classの属性ユーザーはUser型であり、クエリはlong型と互換性のある型であるとみなします。

... パラメータ値[19533]は、あなたがこの上でより多くの助けを必要とする場合、完全な実体を参照するために素晴らしいことだそう期待タイプ[package.name.entity.User ...

と一致しませんでしたユーザーと顧客

+0

これは意味があります。私はそれを修正しようとしています、それがうまくいけば、私は答えとしてあなたの印をつけます。それ以外の場合は、おそらくもっと情報を共有します。 – CSLearner

+0

一般に、クエリはテーブル名とテーブルの列名ではなく、Javaクラスのクラス名(大文字と小文字を区別)とプロパティ名にリンクされます。 '@ OneToOne'関係やそれに類するものによって引き起こされる外部キーを含むテーブルがある場合、クエリ内のパラメータは、そのオブジェクトのIDに設定される必要があります。 – Froxx

0

パラメータが@OneToOneオブジェクトになりますと、あなたは、次のようクエリを与えなければならないので、オブジェクト内のIDを呼び出す必要があるため、データベースに起こっている:

「ユーザーユーザーどこからユーザーを選択user.customer.id =:param "

関連する問題