相关疑难解决方法(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万
查看次数

@NamedNativeQuery - 如何将其绑定到存储库方法?

我正在使用Spring+ Hibernate并且我有一个特殊情况,我需要获取(一个列表)非Entity对象作为查询的结果.

我决定使用@ConstructorResultin @SqlResultSetMapping并参考此映射@NamedNativeQuery,如此此处所述.

然而,在使用命名原生查询所有案例中,他们获得EntityManager通过实例@PersistenceContext并调用createNativeQuery就可以了,提供name@NamedNativeQuery作为参数传递给该呼叫,如在回答.

如何将存储库中声明的方法映射interface到特定的@NamedNativeQuery?我的尝试是使用EntityName.MethodNameInRepositoryMethodNameInRepository作为name@NamedNativeQuery,但没有运气.

这是我的简化代码:

@Entity(name = "AdDailyData")
@SqlResultSetMapping(
        name="RevenueByAppAndDayMapping",
        classes=@ConstructorResult(
                targetClass=RevenueByAppAndDay.class,
                columns={@ColumnResult(name="country_code"),
                        @ColumnResult(name="revenue", type=Double.class),
                        @ColumnResult(name="currency")}))
@NamedNativeQuery(
        name="AdDailyData.aggregateRevenue",
        query="SELECT country_code, sum(earnings) as revenue, currency "
                + "FROM ad_daily_data, pseudo_app, app "
                + "WHERE ad_daily_data.pseudo_app_id=pseudo_app.id AND pseudo_app.app_id=app.id AND app.id=:appId and ad_daily_data.day …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data-jpa

12
推荐指数
1
解决办法
8820
查看次数

使用Native Query从Spring Data返回自定义对象

我的问题是基于另一篇文章.如何使用本机查询实现相同的功能?本机查询不允许JPQL因此也不允许新实例.

我的POJO.

class Coordinates {

    private final BigDecimal latitude
    private final BigDecimal longitude

    ...
}
Run Code Online (Sandbox Code Playgroud)

我的数据库表包含城市边界的坐标,因此有三列:city_name,纬度,经度.每个城市都包含很多(实际上很多)周边坐标,用于在Google地图中构建阴影区域.

我打算在该表上构建一个简单的本机查询,该查询应该返回一个坐标列表.

java spring jpa spring-data spring-boot

9
推荐指数
2
解决办法
4万
查看次数

是否可以在没有实体的情况下使用 JpaRepository ?

JpaRepository没有实体可以使用吗?在这种情况下,将其替换为 DTO。

如下示例

 @Repository
public interface BffRepository extends JpaRepository<BffDTO, String> {

@Query(nativeQuery = true, value = "select\n"
        + "ent.name as enterprise_name, dep.name as department_name,\n"
        + "sq.name as squad_name, acc.firstname as job_owner_name,\n"
        + "tpt.name as test_template_name, job.name, job.job_blocked, job.job_removed,\n"
        + "job.bot_scm_branch, job.bot_scm_url, job.schedule_startdate,\n"
        + "job.expiration_date, job.timestamp,job.uuid,job.schedule_starttime,\n"
        + "tpt.job_execution_timeout\n"
        + "from portal.jobs job\n"
        + "left join portal.enterprises ent on (ent.uuid = job.enterprise_id)\n"
        + "left join portal.departments dep on (dep.uuid = job.department_id)\n"
        + "left join portal.squads sq on (sq.uuid = job.squad_id)\n"
        + …
Run Code Online (Sandbox Code Playgroud)

java jpa spring-boot

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

春季 JPA。如何从 @Query(nativeQuery = true) 映射到 POJO

有疑问,就这样吧

select 1 "colName"
Run Code Online (Sandbox Code Playgroud)

我想使用 Spring Data JPA 将结果映射到 POJO 类型。

因此,图片是:

public interface MyAwesomeSuperInterface extends CrudRepository {
    @Query(value = "select 1 \"colName\"", nativeQuery = true)
    List<POJO> something();
}
Run Code Online (Sandbox Code Playgroud)

问题是如何将其映射到POJO.class

按照我认为我会得到的常见建议:

  1. 不,我不想将其更改为 JSQL 并执行“新 POJO”。
  2. 为什么?因为我有一个复杂的sql查询,它无法反映到JSQL中。
  3. 不,我不会提出疑问。我只想知道如何使用将上面的示例映射到 POJO Spring Data。谢谢

java spring spring-data-jpa

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