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

Spring Data JPA:查询如何返回非实体对象或对象列表?

薄鸿远
2023-03-14
问题内容

我在我的项目中使用spring data
JPA。我正在玩数百万条唱片。我有一个要求,我必须获取各种表的数据并构建一个对象,然后将其绘制在UI上。现在如何实现我的Spring数据存储库。我读过它可以通过命名本机查询来实现。

如果命名的本机查询未返回实体或实体列表,则可以使用@SqlResultSetMapping批注将查询结果映射到正确的返回类型。

但是,当我尝试使用@SqlResultSetMapping它时,将采用另一个 entityResult
。我了解的意思是,它只是将一些查询结果仅转换为实体结果集,但是我想要一个非实体对象的结果集。

@SqlResultSetMapping(
    name="studentPercentile",
    entities={
        @EntityResult(
           entityClass=CustomStudent.class,
              fields={
                  @FieldResult(name="id", column="ID"),
                  @FieldResult(name="firstName", column="FIRST_NAME"),
                   @FieldResult(name="lastName", column="LAST_NAME")
              }         
        )
   }
) 
@NamedNativeQuery(
    name="findStudentPercentile", 
    query="SELECT * FROM STUDENT", 
    resultSetMapping="studentPercentile")

在上面的示例中,我只是尝试将学生实体的结果放入另一个非实体的 pojo’CustomStudent ‘中。(
此示例我试图仅出于POC目的执行,实际用例非常复杂,复杂的查询返回不同的结果集 )。

如何实现以上用例?除了使用名称查询,还有其他方法使我的存储库方法返回“非实体”对象吗?


问题答案:

当我第一次遇到这个问题时,我感到非常惊讶,但是,是的,您只能使用@SqlResultSetMapping将查询结果映射到标量和托管实体。

我猜,您能做的最好的就是跳过自动映射。没有映射的查询将返回List<Object[]>,您可以按需要的方式映射它。

另一种方法是使用@MappedSuperclass。表示为@MappedSuperclass的类(在您的情况下为CustomStudent)可以在@SqlResultSetMapping中使用(虽然不确定为100%)。但是您需要引入继承层次结构,也就是说,您的Student实体必须扩展CustomStudent。在大多数情况下,正确的OO设计会浪费时间,因为继承会有点人为…



 类似资料:
  • 问题内容: 我在我的项目中使用spring data JPA。我正在玩数百万条唱片。我有一个要求,我必须获取各种表的数据并构建一个对象,然后将其绘制在UI上。现在如何实现我的Spring数据存储库。我读过它可以通过命名本机查询来实现。 如果命名的本机查询未返回实体或实体列表,则可以使用@SqlResultSetMapping批注将查询结果映射到正确的返回类型。 但是,当我尝试使用它时,将采用另一个

  • 本文向大家介绍MyBatis-Plus 查询返回实体对象还是map,包括了MyBatis-Plus 查询返回实体对象还是map的使用技巧和注意事项,需要的朋友参考一下 在常见场景下:返回数据建议使用map,不建议使用实体对象 遇到了这个问题,迷惘,遂问大神,大神曰:如果是组合体,就用map;如果是单体实体,就用实体。实体类对应单表,多表返回用map。 我想省事全用map,但是那我学了面向对象是用来

  • 我使用mysql存储过程来检索对象列表。这可能吗? 我在看这篇文章 问题: > 如何使用结果集检索select语句中的对象列表? 如何将结果集映射到对象列表? CREATE DEFINER=@PROCEDURE(ININT,OUTINT,OUTINT,OUTVARCHAR(50),OUTVARCHAR(50),OUTFLOAT 内部连接(从rate中选择aid,r.rate,re.country_

  • 我有JPA持久实体wjich有50个字段。有时我需要将所有50个字段显示到用户界面,或者有时比这少得多。 我能想到两种方法 方法1:- 我将继续将实体返回到UI。有一些方法(带有注释)可以让我提到需要返回下的哪些特定字段 例子:- 如果我想在将json返回到浏览器之前忽略Employee类中的,我将创建,其中包含所需的,如下所示 方法2:- 我将制作新的POJO,再次包含所有5o字段,并返回到UI

  • 我的问题与这条线有关。 下面是我使用group by some Field的存储库方法: 该系统工作正常,结果如下: 我尝试了以下返回类型;但每件事都返回同样的错误。希望有人能帮助我,谢谢你。

  • 我正在使用一个双端队列(java.util.Dequeue),希望在队列中找到一个对象并返回它。 我目前正在使用方法检查队列是否包含对象,但不知道如何获取找到的对象的实际实例。正在搜索的实例不是同一个实例,因为我正在重写方法来测试类变量子集的相等性。 如果不可能使用退出来做到这一点,那么我应该用什么来代替呢?我需要将对象推送到列表的两端,并从一开始就将其删除。显然能够搜索一个对象并得到它的实例化。