java - Spring中使用@Query注解的原生查询

标签 java spring hibernate jpa nativequery

我在 Spring 中遇到 native 查询问题。我在参数值中使用注释@Query 和参数nativeQuery=true 以及SQL 查询。

我在文件 RezerwacjaDao.java 中有以下方法:

@Query(value = "select d.DATA, pt.POKOJTYP_ID, pt.POKOJTYP_NAZWA, 10 \n" +
        "from LISTADAT(:data_od, :data_do) d \n" +
        "left join POKOJTYP pt on 1=1 \n" +
        "order by d.DATA, pt.POKOJTYP_NAZWA",
        nativeQuery = true)
List<DostepnoscTypyListDTO> getDostepnoscNaTypy(
        @Param("data_od") Date dataOd,
        @Param("data_do") Date dataDo);

在文件 RezerwacjaController.java 中我有:

@GetMapping("/getDostepnoscNaTypy")
public @ResponseBody
List<DostepnoscTypyListDTO> getDostepnoscNaTypy(Date dataOd, Date dataDo) {               
   return rezMgr.getDostepnoscNaTypy(dataOd, dataDo);
}

在 RezerwacjaManager.java 中:

public List<DostepnoscTypyListDTO> getDostepnoscNaTypy(Date dataOd, Date dataDo) {     
    return rezerwacjaDao.getDostepnoscNaTypy(dataOd, dataDo);
}

问题是当调用方法 rezerwacjaDao.getDostepnoscNaTypy(dataOd, dataDo) 并执行此查询时。 我收到错误错误:

"Failed to convert from type [java.lang.Object[]] to type [ekoncept.dto.DostepnoscTypyListDTO] for value '{2018-05-01 00:00:00.0, 4, Apartament, 10}'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.sql.Timestamp] to type [ekoncept.dto.DostepnoscTypyListDTO]",

DostepnoscTypyListDTO.java:

public class DostepnoscTypyListDTO {

   @Getter @Setter private Integer pokojtypId;
   @Getter @Setter private String pokojtypNazwa;
   @Getter @Setter private String naDzien;
   @Getter @Setter private Integer ileDostepnych;

    public DostepnoscTypyListDTO(
            String naDzien, Integer pokojtypId, String pokojtypNazwa,
            Integer ileDostepnych) {

        this.pokojtypId = pokojtypId;
        this.pokojtypNazwa = pokojtypNazwa;
        this.naDzien = naDzien;
        this.ileDostepnych = ileDostepnych;
    }

    public DostepnoscTypyListDTO(
            Timestamp naDzien, //Date naDzien,
            Integer pokojtypId, String pokojtypNazwa,
            Integer ileDostepnych)  {

        SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd");
        this.naDzien = df.format(naDzien);  //naDzien;

        this.pokojtypId = pokojtypId;
        this.pokojtypNazwa = pokojtypNazwa;
        this.ileDostepnych = ileDostepnych;
    }
}

最佳答案

您需要指定如何将数据库返回的响应映射到您想要的对象。

native 查询默认返回 Object[],它需要映射到您的类。 查看其他帖子:Return custom object from Spring Data with Native Query

关于java - Spring中使用@Query注解的原生查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51124270/

相关文章:

java - 如何覆盖 Android 中现有的应用程序图像 (png) 文件

java - 如何使内联标签(需要 com.sun)更跨平台?是否有非 Oracle/更多跨平台的 javadoc 解析器?

spring - 升级到 Spring boot 2.x 后请求映射不起作用

Mysql 与 Hibernate AbstractMultiTenantConnectionProvider 与 C3P0ConnectionProvider 抛出 GenericJDBCException : Could not open connection

hibernate - 如何在 Ubuntu 18.04 中 hibernate

java - 等待执行器的线程由执行器提交完成

java - 映射结构 : map field conditionally or ignore

java - Spring : Bean class is not recognised by the spring and throwing ClassNotFoundException

java - 从 Spring Controller 获取 Web App 根目录

performance - Hibernate/JPA 与 JDBC 性能对比