2012-07-27 88 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[]); 
相关问题