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データベース)
どうすればこのエラーを修正できますか?
これは意味があります。私はそれを修正しようとしています、それがうまくいけば、私は答えとしてあなたの印をつけます。それ以外の場合は、おそらくもっと情報を共有します。 – CSLearner
一般に、クエリはテーブル名とテーブルの列名ではなく、Javaクラスのクラス名(大文字と小文字を区別)とプロパティ名にリンクされます。 '@ OneToOne'関係やそれに類するものによって引き起こされる外部キーを含むテーブルがある場合、クエリ内のパラメータは、そのオブジェクトのIDに設定される必要があります。 – Froxx