2011-10-18 36 views
0

我想從我的用戶表中獲得不同城市的列表。我認爲下面的代碼將工作,但給出了一個錯誤: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(); 
... 

它給出:類型不匹配不能將列表轉換爲列表。我嘗試了兩個獲得第一個用戶,然後getResult一個城市,但同一個錯誤下面一行。

我看到一些例子,但並沒有真正地告訴如何用正確的代碼來獲得它的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

你應該upvote Piotor的職位,而不是給自己的信用爲他的答案。 – MuffinMan