我有
@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]
请帮忙。谢谢。
最佳答案
我猜想,主要问题是 @SqlResultSetMapping
中 entityClass = 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/