2011-10-18 11 views
0

私のUserテーブルから異なるCityのリストを取得したいと考えています。私は以下のコードが動作するだろうと思ったが、エラーを与える:JPA NamedQueryが別の列を取得

User.java 
@Entity 
@Table(name="user_info") 
... 
@NamedQuery(name = "User.all.cities", query = "SELECT distinct u.city FROM User u"), 
... 
@embedded 
private City city; 

UserBusinessLogic.java: 
... 
TypedQuery<City> typedQuery = entityManager.createNamedQuery("User.all.cities",User.class); 
List<City> names = typedQuery.getResultList(); 
... 

それが与える:型の不一致がリストにリストを変換することはできません。私は2つの最初のユーザーgetResultの都市を取得してみましたが、同じエラーが1行下です。

私はいくつかの例を見ていますが、正しいコードでSQL構文を取得する方法を実際には教えていません。あなたの助けのための

おかげ

ジェス

+0

あなたはスタックトレースを貼り付けてくださいことはできますか? –

答えて

10

は良い見ていない最初の事はあなたが市のオブジェクトを求めるが、ユーザーを取得するために宣言することです。

あなたは持っている:

@NamedQuery(name = "User.all.cities", 
      query = "SELECT distinct u.city FROM User u"), 

TypedQuery<City> typedQuery = 
        entityManager.createNamedQuery("User.all.cities", User.class); 

どこそれが必要be

TypedQuery<City> typedQuery = 
        entityManager.createNamedQuery("User.all.cities", City.class); 
+0

ありがとうございました。私は、クエリが定義されたクラス名を使用する必要があるという印象を受けましたが、JPAのクエリ名が一意でなければならないため、そうではありません。 – jessarah

+0

@ jessarah - 解決策がある場合は、正しい答えを記入してください。他の人にあなたの質問に答えた兆候を伝えてください。 –

+0

しました。私はあなたが見ているようにフォーラムの初心者です。 – jessarah

-2

動作するコードは次のとおりです。

results = getJpaTemplate().execute(new JpaCallback<List<City>>() { 
    @Override 
    public List<City> doInJpa(EntityManager em) throws PersistenceException { 
    TypedQuery<City> query = em.createNamedQuery("User.all.cities", City.class); 
    return query.getResultList() ; 
    } 
}) ; 
+1

あなたは自分の答えを信じる代わりに、Piotorの投稿をupvoteするべきです。 – MuffinMan