【发布时间】:2019-04-16 10:38:45
【问题描述】:
下面是我的普通 POJO 对象,它具有所有映射。请注意,它不是 Entity 对象。
import javax.persistence.ColumnResult;
import javax.persistence.ConstructorResult;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SqlResultSetMapping;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@AllArgsConstructor
@SqlResultSetMapping(name = "refundReportMapping", classes = { @ConstructorResult(targetClass = RefundReport.class, columns = {
@ColumnResult(name = "customer_name"),
@ColumnResult(name = "hashed_email"), @ColumnResult(name = "address"),
@ColumnResult(name = "partner_order"),
@ColumnResult(name = "refund_amount") }) })
@NamedNativeQuery(name = "findRefundReportByStatusNamesParamsNative", query = "SELECT concat(bd.first_name,' ',bd.last_name) as 'customer_name',bd.email_address AS 'hashed_email',concat(bd.address1,' ',bd.address2) AS 'address',"
+ o.reservation_id AS 'partner_order',"
+ "(oa.principal_amount+oa.shipping_amount+oa.tax_amount) AS 'refund_amount'"
+ "FROM orders o, order_adjustments oa WHERE oa.status = :status"
+ "and o.buyer_detail_id=bd.buyer_detail_id and o.reservation_id=oa.order_id", resultClass = RefundReport.class, resultSetMapping = "refundReportMapping")
public class RefundReport {
private String customerName, email, address,
partnerOrder;
private BigDecimal partilaRefundAount;
}
public interface RefundReportRepository extends
Repository<RefundReport, String> {
List<RefundReport> findRefundReportByStatus(
@Param("status") String status);
}
【问题讨论】:
-
SqlResultSetMapping 和 NamedNativeQuery 注释需要在实体上,而不是在非实体 POJO 上。 stackoverflow.com/a/49536120/1116320
-
我也尝试过提供实体,但它需要标识符。我的 pojo 没有任何 Id 列。
-
我也尝试过提供实体,但它需要标识符。我的 pojo 没有任何 Id 列。所以我的问题是我们可以在实体中定义一个标识符而不在表中包含 ID id 列。
标签: java spring spring-boot spring-data-jpa spring-data