我有一个查询,它在带有注解@Query的接口中工作得很好,如下所示。
@Query(value = "SELECT c.fecha, c.clave"
+ " FROM mavi.contrarecibo c "
+ " WHERE p.idproveedor = :idProveedor "
+ " AND c.fecha BETWEEN :inicio AND :termino "
+ " AND cf.estatusfactura = :estatusfactura"
+ " ORDER BY c.clave"
,
nativeQuery = true
)
List<ContrareciboPagoDto> pagosByProveedor(
@Param("idProveedor")Long idProveedor,
@Param("inicio")LocalDate inicio,
@Param("termino")LocalDate termino,
@Param("estatusfactura")String estatusContrareciboFacturaEnum
);
这很好,现在为了使这个查询更灵活,我想添加一些条件限制,为此,我创建了这个接口的impl并尝试了以下操作。
//只有方法。
@Override
public List<ContrareciboPagoDto> pagosByProveedor(Long idProveedor, LocalDate inicio, LocalDate termino,
String estatusContrareciboFacturaEnum) {
StringBuilder qry = new StringBuilder("SELECT c.fecha, c.clave, p.razonsocial, p.rfc, cf.numeroFactura, cf.monto, cf.fechaPago, oc.moneda, "
+ " pt.clabe, pt.cuentacontable, cf.uuid, p.diascredito, oc.descdepartamento, oc.observaciones, cf.estatusFactura "
+ " FROM mavi.contrarecibo c "
+ " JOIN mavi.contrarecibo_factura cf on cf.idcontrarecibo = c.idcontrarecibo "
+ " JOIN mavi.proveedor_tesoreria pt on pt.idproveedortesoreria = c.idproveedor "
+ " JOIN mavi.proveedor p on p.idproveedor = pt.idproveedor "
+ " JOIN mavi.orden_compra oc on oc.folio = cf.ordencompra "
);
if( idProveedor > 0) {
qry.append( " WHERE p.idproveedor = ").append(idProveedor);
}
// SOME OTHER RESTRICTIONS.
return this.entityManager
.createNativeQuery( qry.toString() , ContrareciboPagoDto.class)
.getResultList();
}
相反,它只是一个接口。
public interface ContrareciboPagoDto {
public LocalDate getFechaRevision();
public String getNumeroContraRecibo() ;
问题是我得到了一个错误。
org.springframework.orm.jpa.JpaSystemException:未知实体:com.mavi.compras.service.dto.ContrareciboPagoDto;嵌套异常为org.hibernate.MappingException:未知实体:com.mavi.compras.service.dto.ContrareciboPagoDto
如何实现此查询以使其更通用?
谢谢大家。
1条答案
按热度按时间ruarlubt1#
您不能将DTO类与
createNativeQuery()
一起使用,因为它期望接收一个用@Entity
注解的类。为了获得DTO,您可以使用例如。变压器:看看这个答案:https://stackoverflow.com/a/45934668/12473843