java - JPA 未知 SqlResultSetMapping

标签 java jpa

我有

@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:

public class OrderDetailsReportDto {
    private Long orderId;
    private Long orgId;
}

在我的 OrderManager.class 中:

StringBuilder queryView = new StringBuilder("SELECT * FROM order_details_report_view");
        Query dataQuery = em.createNativeQuery(queryView.toString(), "OrderDetailsReportMapping");

但是我得到了错误:

Unknown SqlResultSetMapping [OrderDetailsReportMapping]

请帮忙。谢谢。

最佳答案

我猜想,主要问题是 @SqlResultSetMappingentityClass = OrderDetailsReportDto.class 的使用。来自 Baeldung 的教程 "A Guide to SqlResultSetMapping: 5.1 Single Entity"

EntityResult requires us to specify the entity class

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

EDIT#1 例如:

@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 +
                '}';
    }
}
 Query query = em.createNativeQuery(
                "select * from order_details_report_view",
                "OrderDetailsReportMapping");
 List<OrderDetailsView> orderDetailsViews = query.getResultList();

编辑#2 如果 "orderId" 不唯一,您可以将行号视为 id 列:1 , 2

在 Postgres 数据库上测试:

        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")
        }
 em.createNativeQuery(
added >>>       "select row_number() OVER () as \"FakeId\", * "
                + "from order_details_report_view",
                "OrderDetailsReportMapping");

关于java - JPA 未知 SqlResultSetMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60681444/

相关文章:

java - 图片上传问题

Java 类 类

java - 如何确定已提交哪个表单并在 servlet 中验证它们

java - 使用 JPA2/Hibernate 并发写入和读取

JPA 和池连接中的 javax.ejb.EJBException

java - 在 MappedSuperclass 上更新 Spring-data-jpa 时出错

java - 无法创建其他布局版本

java - JSP在JavaEE和tomcat 9中无法指向Servlet类中的Post方法

java - JPA 与@ManyToOne

java - Spring Data 域事件丢失(?)