我有过
@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]请帮帮忙。谢谢。
发布于 2020-03-14 10:05:31
我猜,主要的问题是entityClass = OrderDetailsReportDto.class在@SqlResultSetMapping中的使用。来自白龙的教程“SqlResultSetMapping指南: 5.1单一实体”
EntityResult要求我们指定实体类
您应该使用带@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();EDIT#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");https://stackoverflow.com/questions/60681444
复制相似问题