2012-07-27 89 views
0

使用Spring Roo(但手動創建這些方法可能無關)我試圖在一個列表中顯示兩個表。我有下面的方法來獲取所有人在用戶名類people.java中的用戶名。我相信這種方法可以正常工作。實體管理器Hibernate/Spring Roo錯誤 - 無法創建TypedQuery

public static TypedQuery<Person> findAllPeople() { 
    String queryStr = "SELECT o.name, b.username FROM Person o INNER JOIN o.users b"; 
    TypedQuery<Person> query = entityManager().createQuery(queryStr, Person.class); 
    return query; 
} 

這裏是控制器

@RequestMapping(produces = "text/html") 
public String list(@RequestParam(value = "page", required = false) Model uiModel) { 
    uiModel.addAttribute("people", Person.findAllPeople()); 
    return "people/list"; 
} 

當我試圖通過一個list.jspx我得到的錯誤運行此「不能使用要求的結果查詢創建TypedQuery與一個以上的回報碼鍵入[com.test.peopletest.Person];「

有誰知道我該如何返回這個查詢所有結果輸出正確?

回答

2

你是不是查詢一個Person對象,你是查詢似乎返回兩個字符串

SELECT o.name, b.username... 

爲了返回一個人,你應該有

SELECT o FROM Person o 

剛剛從看你的查詢,看起來你可以深入到用戶/用戶名,一旦你有你的人物。

0

好像你可以使用像......

SELECT o FROM Person o FETCH JOIN o.users b 
當你走所有的用戶都從內存(沒有DB往返)加載person.users

將完成。

或者,理論上(讀未經測試!),你可以

SELECT o.name, b.username FROM Person o FETCH JOIN o.users b 
TypedQuery<String[]> query = entityManager().createQuery(queryStr, String[]); 
相關問題