2016-05-19 14 views
0

私は、次のJPQLクエリでエラーを取得しています:カラム名のアンダースコアを使用してJPQLクエリを実行するにはどうすればよいですか?

@NamedQuery (name = "Customer.getById", query = 
"SELECT o 
FROM bub.Customer o 
WHERE o.user_id = :myid") 

[bub.Customerは@Entity名]

をこれは私が受けていたエラーメッセージの抜粋です:

org.hibernate.HibernateException: 
Errors in named queries: 
Customer.getById\n 
Caused by: org.hibernate.HibernateException: 
Errors in named queries: Customer.getById 

WHERE句を削除すると、Wildflyは私のWebアプリケーションを展開できるようになるので、WHERE句に間違いがあります。具体的には、カラム名がCustomerテーブルのuser_idなので、JPQLのアンダースコア(_)に問題があると思われます。私はWHERE句を "WHERE o.userId =:myid"に変更しようとしましたが、それもうまくいきませんでした。

WHERE句を修正してウェブサイトを展開し、正しい方法で動作させるにはどうすればよいですか?

EDIT: 関連する方法はこれです:

public static Customer getById (final EntityManager em, final long id) 
{ 
    return em.createNamedQuery ("Customer.getById", Customer.class).setParameter ("myid", id).getSingleResult(); 
} 

私はこれはしかし、問題はないと思います。

EDIT2: これが問題だっ判明:

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

私はこれまでJPQLクエリを変更してしまった、今それが働いている:

@NamedQuery (name = "Customer.getById", query = 
"SELECT o 
FROM bub.Customer o 
WHERE o.user = :myid") 
+0

エンティティのjavaコードも投稿します – Turo

+0

私はクエリを呼び出すメソッドを追加しましたが、 atは問題です。 WHERE句を削除しない限り、私のコードはすぐには展開されないので、WHERE句が主な問題だと思います。 – CSLearner

+0

私はCustomerクラスを意味しました.JPQLでは列名は使用しませんでしたが、属性名(何か他のものに注釈を付けない限り) – Turo

答えて

2

JPQLでは使用しないでください列名、属性名(何か他に注釈を付けない限り)

関連する問題