我在我的项目中使用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目的执行,实际的用例很复杂,复杂的查询返回不同的结果集).
如何实现上述用例?除了使用名称查询之外还有其他方法我的存储库方法返回非实体对象吗?
我正在使用Spring+ Hibernate并且我有一个特殊情况,我需要获取(一个列表)非Entity对象作为查询的结果.
我决定使用@ConstructorResultin @SqlResultSetMapping并参考此映射@NamedNativeQuery,如此处和此处所述.
然而,在使用命名原生查询所有案例中,他们获得EntityManager通过实例@PersistenceContext并调用createNativeQuery就可以了,提供name的@NamedNativeQuery作为参数传递给该呼叫,如在此回答.
如何将存储库中声明的方法映射interface到特定的@NamedNativeQuery?我的尝试是使用EntityName.MethodNameInRepository或MethodNameInRepository作为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) 我的问题是基于另一篇文章.如何使用本机查询实现相同的功能?本机查询不允许JPQL因此也不允许新实例.
我的POJO.
class Coordinates {
private final BigDecimal latitude
private final BigDecimal longitude
...
}
Run Code Online (Sandbox Code Playgroud)
我的数据库表包含城市边界的坐标,因此有三列:city_name,纬度,经度.每个城市都包含很多(实际上很多)周边坐标,用于在Google地图中构建阴影区域.
我打算在该表上构建一个简单的本机查询,该查询应该返回一个坐标列表.
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) 有疑问,就这样吧
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?
按照我认为我会得到的常见建议:
Spring Data。谢谢