Spring Data Jpa 无法按名称找到列位置:column1 [在此ResultSet中找不到列名column1

isr3a4wc  于 2023-10-20  发布在  Spring
关注(0)|答案(1)|浏览(301)

我有这个实体:

@Entity
@Table(name = "_8", schema = "acc")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class compras {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "id")
private long id;
@Basic
@Column(name = "entity_id")
private Integer entityId;
@Basic
@Column(name = "subdiario")
private Integer subdiario;
@Basic
@Column(name = "periodo_tributario")
private Integer periodoTributario;
@Basic
@Column(name = "tipo_operacion")
private Integer tipoOperacion;
@Basic
@Column(name = "tipo_comprobante")
private Integer tipoComprobante;
@Basic
@Column(name = "fecha_emision")
private Date fechaEmision;
@Basic
@Column(name = "fecha_vencimiento")
private Date fechaVencimiento;
@Basic
@Column(name = "numero_serie")
private String numeroSerie;
@Basic
@Column(name = "numero_correlativo")
private String numeroCorrelativo;
@Basic
@Column(name = "importe_final")
private Integer importeFinal;
@Basic
@Column(name = "tipo_documento")
private String tipoDocumento;
@Basic
@Column(name = "numero_documento")
private String numeroDocumento;
@Basic
@Column(name = "clasificacion_bienes_servicios")
private Integer clasificacionBienesServicios;
@Basic
@Column(name = "destino")
private Integer destino;
@Basic
@Column(name = "valor")
private BigDecimal valor;
@Basic
@Column(name = "icbp")
private BigDecimal icbp;
@Basic
@Column(name = "isc")
private BigDecimal isc;
@Basic
@Column(name = "otros_cargos")
private BigDecimal otrosCargos;
@Basic
@Column(name = "tipo_moneda")
private String tipoMoneda;
@Basic
@Column(name = "tasa_detraccion")
private Integer tasaDetraccion;
@Basic
@Column(name = "tasa_percepcion")
private Integer tasaPercepcion;
@Basic
@Column(name = "medio_pago")
private Integer medioPago;
@Basic
@Column(name = "tipo_comprobante_modificado")
private Integer tipoComprobanteModificado;
@Basic
@Column(name = "numero_serie_modificado")
private String numeroSerieModificado;
@Basic
@Column(name = "numero_correlativo_modificado")
private Integer numeroCorrelativoModificado;
@Basic
@Column(name = "glosa")
private String glosa;
@Basic
@Column(name = "cui")
private String cui;
@Basic
@Column(name = "observaciones")
private String observaciones;}

这个仓库有一个原生查询(我需要这个原生的,因为它是一个例子,能够Map一个更复杂的):

public interface ComprasRepo extends JpaRepository <compras,Long> {
    List<compras> findAllByEntityId(int entityId);
    @Query(value = "SELECT id,fecha_emision AS FechaEmision, numero_serie AS NumeroSerie, numero_correlativo AS NumeroCorreltivo, valor AS Valor, igv AS IGV, icbp AS ICBP, isc AS ISC, otros_cargos AS OtrosCargos FROM acc._8 WHERE entity_id = :entity AND periodo_tributario = :periodo", nativeQuery = true)
    List<compras> TablaPersonal(@Param("entity") Long entityId, @Param("periodo") Integer periodo);
}

当一个人尝试测试:

@SpringBootTest
class DataWarehouseApplicationTests {
    @Autowired
    private ComprasRepo comprasRepo;
    @Test
    void contextLoads() {

        List<compras> resultado=comprasRepo.TablaPersonal(1L, 202201);
        for (compras record : resultado){
            System.out.println(record);
        };
    }
}

这将返回以下错误:
org.springframework.dao.InvalidDataAccessResourceUsageException:无法按名称找到列位置:clasificacion_bienes_servicios [在此结果集中找不到列名clasificacion_bienes_servicios。] [n/a]; SQL [n/a]
问题是,我不想检索列A,我不知道为什么错误说没有找到,如果它也不在查询中。
请帮帮我
PD:实体的Map是正确的,它已经用FindAll方法测试过了

j9per5c4

j9per5c41#

看起来您只想从表中读取选定的字段。在这种情况下,不能在结果列表中使用实体类。正如@tgdavis评论中所解释的那样。

解决方案

定义一个新类(POJO),它只包含select语句中的字段。大概是这样的:

public class TablaPersonal {
    private long id;
    private Date fechaEmision;
    private String numeroSerie;
    // ...
}

然后像这样在repo中使用它:

List<TablaPersonal> getTablaPersonal(...)

相关问题