JPA 用自定义实体接收查询返回

一、创建对应的实体

@Data
public class OrderStatusDTO implements Serializable {

	@ExcelProperty(value = "表头1", index = 0)
	private String area;

	@ExcelProperty(value = "表头2", index = 1)
	private String apart;

	@ExcelProperty(value = "表头3", index = 2)
	private String clientName;

	@ExcelProperty(value = "表头4", index = 3)
	private String orderStateText;

	@ExcelIgnore
	private byte orderState;

	@ExcelIgnore
	private String orderId;

	@ExcelIgnore
	private Date createDate;

	@ExcelIgnore
	private BigInteger orderCount;

	public String getStatusCount() {
		return  this.orderCount.toString();
	}

	@ExcelProperty(value = "表头5", index = 4)
	private String statusCount;

	@Override
	public String toString() {
		return "OrderInfo{" +
				"orderId=" + orderId +
				"statusCount=" + statusCount +
				'}';
	}

}

 

 

二、自定义查询,查询字段的别名和实体对应即可

String sql = "SELECT order_id as orderId, create_date as createDate,area as area, apart, " +
                "client_name as clientName, order_state as orderState," +
				"count(1) as orderCount from order_info where %s GROUP BY client_name,order_state limit %s,%s";

sql = String.format(sql, getWhereClause(criteria), offset, pageable.getPageSize());

// 用自定义实体接收,保证字段和数据类型一致
List<OrderStatusDTO> orderInfoList1 = entityManager.createNativeQuery(sql).unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(OrderStatusDTO.class)).list();
             

三、可以使用非原生语句,并且给实体实现构造函数,来进行接收

@Data
public class OrderTest implements Serializable {

    public OrderTest(String orderId, String erpOrder) {
        this.orderId = orderId;
        this.erpOrder = erpOrder;

    }

    private String orderId;

    private String erpOrder;

}

四、自定义原生查询

@Query(value = "select new OrderTest(o.orderId, o.erpOrder) from OrderInfo o  where o.orderId = ?1", nativeQuery = false)
OrderTest selectTest(String orderId);

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值