首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA未知SqlResultSetMapping

JPA未知SqlResultSetMapping
EN

Stack Overflow用户
提问于 2020-03-14 09:42:25
回答 1查看 5.2K关注 0票数 1

我有过

代码语言:javascript
复制
@SqlResultSetMapping(
        name = "OrderDetailsReportMapping",
        entities = @EntityResult(
                entityClass = OrderDetailsReportDto.class,
                fields = {
                    @FieldResult(name = "orderId", column = "col_0_0_"),
                    @FieldResult(name = "orgId", column = "col_1_0_")
}))
public class OrderDetailsReportMapping {

}

和OrderDetailsReportDto.class:

代码语言:javascript
复制
public class OrderDetailsReportDto {
    private Long orderId;
    private Long orgId;
}

在我的OrderManager.class中:

代码语言:javascript
复制
StringBuilder queryView = new StringBuilder("SELECT * FROM order_details_report_view");
        Query dataQuery = em.createNativeQuery(queryView.toString(), "OrderDetailsReportMapping");

但我错了:

代码语言:javascript
复制
Unknown SqlResultSetMapping [OrderDetailsReportMapping]

请帮帮忙。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-03-14 10:05:31

我猜,主要的问题是entityClass = OrderDetailsReportDto.class@SqlResultSetMapping中的使用。来自白龙的教程“SqlResultSetMapping指南: 5.1单一实体”

EntityResult要求我们指定实体类

您应该使用带@Entity注释的类来存储结果。

例如,EDIT#1

代码语言:javascript
复制
@SqlResultSetMapping(
        name = "OrderDetailsReportMapping",
        entities = @EntityResult(
                entityClass = OrderDetailsView.class,
                fields = {
                        @FieldResult(name = "orderId", column = "first_db_view_col_name"),
                        @FieldResult(name = "orgId", column = "second_db_view_col_name")
                }))
@Entity
@Immutable
public class OrderDetailsView {
    @Id
    private Long orderId;

    private Long orgId;

    @Override
    public String toString() {
        return "OrderDetailsView{" +
                "orderId=" + orderId +
                ", orgId=" + orgId +
                '}';
    }
}
代码语言:javascript
复制
 Query query = em.createNativeQuery(
                "select * from order_details_report_view",
                "OrderDetailsReportMapping");
 List<OrderDetailsView> orderDetailsViews = query.getResultList();

EDIT#2如果"orderId"不是唯一的,您可以将行号作为id列:12

在Postgres数据库上测试:

代码语言:javascript
复制
        fields = {
added >>>               @FieldResult(name = "id", column = "fakeId"),
                        @FieldResult(name = "orderId", column = "first_db_view_col_name"),
                        @FieldResult(name = "orgId", column = "second_db_view_col_name")
        }
代码语言:javascript
复制
 em.createNativeQuery(
added >>>       "select row_number() OVER () as \"FakeId\", * "
                + "from order_details_report_view",
                "OrderDetailsReportMapping");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60681444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档