0

使用 Spring Roo(但手动创建这些方法可能无关紧要)我试图在一个列表中显示两个表。我有以下方法可以让所有人在 people.java 类中使用他们的用户名。我相信这种方法可以正常工作。

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 运行它时,我收到错误“无法使用请求的结果类型 [com.test.peopletest.Person]; 创建 TypedQuery 以进行具有多个返回的查询;”

有谁知道我如何正确返回此查询并输出所有结果?

4

2 回答 2

2

您不是在查询 Person 对象,您的查询似乎返回两个字符串

  SELECT o.name, b.username...

为了返回一个人,你应该有

  SELECT o FROM Person o

只需查看您的查询,您就可以在拥有人员对象后深入了解用户/用户名。

于 2012-07-27T13:49:12.687 回答
0

看来您可以使用类似...

SELECT o FROM Person o FETCH JOIN o.users b

当您步行 person.users 时,所有用户都从内存中加载(没有数据库往返)将完成。

或者,理论上(阅读未经测试!!),你可以

SELECT o.name, b.username FROM Person o FETCH JOIN o.users b
TypedQuery<String[]> query = entityManager().createQuery(queryStr, String[]);  
于 2012-08-13T21:06:18.300 回答