我们在使用Springboot JPA查询数据内容时,大多数是直接返回表对应的实体类,但是有时候我们需要增加或减少实体类的字段。
即创建一个自定义返回类VO,使用JPA查询,repository接口中直接返回VO
public class DeviceJobStatusVO {
private String deviceId;
private String deviceName;
private String jobId;
private String deviceVersion;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "GMT")
private Date updatedTime;
private Integer status;
private String statusDescription;
public DeviceJobStatusVO(String deviceId, String deviceName, String jobId, String deviceVersion, Date updatedTime, Integer status, String statusDescription) {
this.deviceId = deviceId;
this.deviceName = deviceName;
this.jobId = jobId;
this.deviceVersion = deviceVersion;
this.updatedTime = updatedTime;
this.status = status;
this.statusDescription = statusDescription;
}
}
@Query(value = "select new com.inspur.iot.resource.VO.DeviceJobStatusVO (d.deviceId, t.name, d.resourceJobId, d.deviceVersion,d.updatedTime,d.status,d.statusDescription) from Device t inner join ResourceJobStatus d on t.id=d.deviceId where d.resourceJobId=:jobId and t.name like %:queryData% order by d.updatedTime desc, t.id desc")
Page<DeviceJobStatusVO> listDeviceJobByJobIdQuery(@Param("jobId") String jobId, @Param("queryData") String queryData, Pageable pageable);