相关疑难解决方法(0)

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

我在我的项目中使用spring数据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")
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我只是试图将学生实体的结果转化为另一个不是实体的pojo'CustomStudent '.(这个例子我试图只为POC目的执行,实际的用例很复杂,复杂的查询返回不同的结果集).

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

java hibernate java-ee jpa-2.0 spring-data-jpa

33
推荐指数
3
解决办法
6万
查看次数

如何在具有枚举字段的实体上使用JPA CriteriaQuery填充DTO类字符串字段?

我正在使用JPA Criteria API,在我的查询多选中我想要检索枚举属性,而不是枚举本身.

这是我的查询:

final CriteriaQuery<MyClassDTO> query = builder.createQuery(MyClassDTO.class);
Run Code Online (Sandbox Code Playgroud)

在MyClassDTO我有4个字段如下:

private String icon;
private String provenance;
private int sizeX;
private int sizeY;
Run Code Online (Sandbox Code Playgroud)

我从中检索数据的路径是:

final Root<MyClass> from = query.from(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

MyClass 有3个字段:

@Column
@Enumerated(EnumType.STRING)
private EnumTileIcon enumTileIcon;

@Column
@Enumerated(EnumType.STRING)
private EnumProvenance enumProvenance;

@Column
@Enumerated(EnumType.STRING)
private EnumSize enumSize;
Run Code Online (Sandbox Code Playgroud)

我想要做的是填充MyClassDTO使用query.multiselect,如下所示:

query.multiselect(
    from.get(MyClass_.enumTileIcon.toString()),
    from.get(MyClass_.enumProvenance.name()),
    from.get(MyClass_.enumSize.getWidth()),
    from.get(MyClass_.enumSize.getHeight())
);
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

java enums dao jpa criteria-api

2
推荐指数
1
解决办法
1901
查看次数

标签 统计

java ×2

criteria-api ×1

dao ×1

enums ×1

hibernate ×1

java-ee ×1

jpa ×1

jpa-2.0 ×1

spring-data-jpa ×1