java - Spring中带有@Query注解的本机查询
问题描述
我对 Spring 中的本机查询有疑问。我在参数值中使用带有参数 nativeQuery=true 的注释 @Query 和 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;
}
}
解决方案
您需要指定如何将数据库返回的响应映射到您想要的对象中。
默认情况下,本机查询返回 Object[],它需要映射到您的类。检查此其他帖子:Return custom object from Spring Data with Native Query
推荐阅读
- webrtc - 在阻止传出 UDP 连接的限制性防火墙后面访问 BigBlueButton
- python - 如何遍历字符串并变成字典
- r - 使用多个图形 (mfrow3d) + rglWidgets 提高 rGL HTML 性能
- mongodb - 当 created_at 字段为空或 MongoDB 中不存在时如何创建文档
- google-sheets - 数组公式和连接的问题
- postgresql - Aurora/Postgres 多主控?
- ios - 自定义 UITableViewCell 无法正确显示
- swift - 捕获应用程序不活动一段时间
- r - 从 R 中的网站提取表格 - 读入 R 时从 HTML 中省略该表格
- css - CSS Flexbox:将最后第 n 个项目对齐到末尾