当前位置: 首页 > 面试题库 >

JPA Query.getResultList()-以通用方式使用

昌正奇
2023-03-14
问题内容

我正在创建具有多个表的复杂查询,并且需要列出结果。通常,我使用EntityManager并将结果映射到JPA-Representation:

UserEntity user = em.find(UserEntity.class, "5");

然后,我可以访问用户UserEntity定义的所有值。但是,如何访问从本地多表查询返回的字段值?我得到的是一个对象列表。到目前为止还可以,但是那个对象是什么?数组?地图?采集?…

//simpleExample
Query query = em.createNativeQuery("SELECT u.name,s.something FROM user u, someTable s WHERE s.user_id = u.id");
List list = query.getResultList();

//do sth. with the list, for example access "something" for every result row.

我想答案很简单,但是其中的大多数示例仅显示了直接转换为targetClass时的用法。

PS:在示例中,我当然可以使用类映射。但是在我的情况下,someTable它不是由JPA管理的,因此我没有该实体,也没有它的类表示形式,并且由于我要像20个表一样加入,所以我不想创建所有类只是访问值。


问题答案:

一般规则如下:

  • 如果select包含单个表达式并且它是一个实体,那么结果就是该实体
  • 如果select包含单个表达式并且它是一个原始类型,那么结果就是该原始类型
  • 如果select包含多个表达式,则结果Object[]包含相应的图元/实体

因此,在您的情况下listList<Object[]>



 类似资料:
  • 问题内容: 使用实验包,我们可以用来解析HTML文档的某些子部分。 像这样: 这适用于大多数元素。但它似乎没有工作,当某些元素在HTML,像根位置,以及(也许还有其他,不知道)。它只是忽略标签,仅提供文本内容。 可以通过提供语义正确的parent而不是来补救此问题,但这需要我们提前知道HTML是什么。 我希望有类似的通用根目录,但我看不到。那么,是否有某种方式可以与任意HTML片段一起使用呢? 问

  • 使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择

  • 问题内容: 我正在开发一个应用程序,当某个动作发生时,该应用程序会弹出一个JOptionPane。我只是想知道是否有可能当JOptionPane弹出时如何继续使用后台应用程序。当前,当弹出JOptionPane时,除非关闭JOptionPane,否则我无能为力。 编辑 感谢您的答复和信息。认为不适当地将此功能排除在应用程序之外,因为它看起来可能比不必要的麻烦。 问题答案: 该文档明确指出,通过sh

  • 问题内容: 我将Wicket与Wicket Auth Project一起用于表示层,因此将其与Spring Security集成在一起。这是Wicket调用的身份验证方法: 我的Spring Security XML配置的内容(里面)是: 2.3.6节。参考文档的会话固定攻击防护说: 会话固定攻击是一种潜在的风险,恶意攻击者有可能通过访问站点来创建会话,然后诱使另一个用户以相同的会话登录(通过向他

  • 问题内容: 我可以在HTML表单中使用PUT方法将数据从表单发送到服务器吗? 问题答案: XHTML 1.x表单仅支持GET和POST。GET和POST是“ method”属性的唯一允许值。