【问题标题】:Entity Manager Hibernate / Spring Roo Error - Cannot create TypedQuery实体管理器休眠/Spring Roo 错误 - 无法创建 TypedQuery
【发布时间】:2012-07-26 04:28:20
【问题描述】:

使用 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;”

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

【问题讨论】:

    标签: java spring hibernate spring-roo jpql


    【解决方案1】:

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

      SELECT o.name, b.username...
    

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

      SELECT o FROM Person o
    

    仅通过查看您的查询,您似乎可以在拥有个人对象后深入了解用户/用户名。

    【讨论】:

      【解决方案2】:

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

      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[]);  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 2020-02-12
        相关资源
        最近更新 更多