如何解决无法通过 JPA 调用过程 - 无法确定参数的数据类型
当尝试通过代码调用带有时间戳参数的过程时:
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withSchemaName("time_series")
.withProcedureName("refresh_continuous_aggregate")
.declareParameters(new SqlParameter("continuous_aggregate",Types.VARCHAR),new SqlParameter("window_start",Types.TIMESTAMP),new SqlParameter("window_end",Types.TIMESTAMP));
MapSqlParameterSource inParams = new MapSqlParameterSource()
.addValue("continuous_aggregate","time_series.current_data_hourly",Types.VARCHAR)
.addValue("window_start","2020-11-12 01:02:03.123456789",Types.TIMESTAMP)
.addValue("window_end","2021-02-12 01:02:03.123456789",Types.TIMESTAMP);
Map<String,Object> execute = simpleJdbcCall.execute(inParams);
我收到错误:
错误 o.s.i.handler.LoggingHandler -> org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback;错误的 SQL 语法 [{call time_series.refresh_continuous_aggregate(?,?,?)}];嵌套异常 是 org.postgresql.util.PSQLException:错误:无法确定数据 参数类型 $2
当我尝试使用带有动态参数的本机查询时遇到的类似错误:
String queryStr = "CALL time_series.refresh_continuous_aggregate(?1,?2,?3)";
Query query = entityManager.createNativeQuery(queryStr)
.setParameter(1,continuousAggregate)
.setParameter(2,windowStart,TemporalType.TIMESTAMP)
.setParameter(3,windowEnd,TemporalType.TIMESTAMP);
Object singleResult = query.getSingleResult();
错误 o.h.e.jdbc.spi.SqlExceptionHelper -> 错误:语法错误或 接近“$2”
并通过使用 StoredProcedureQuery:
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("time_series.refresh_continuous_aggregate")
.registerStoredProcedureParameter("continuous_aggregate",String.class,ParameterMode.IN)
.registerStoredProcedureParameter("window_start",Date.class,ParameterMode.IN)
.registerStoredProcedureParameter("window_end",ParameterMode.IN)
.setParameter("continuous_aggregate","time_series.current_data_hourly")
.setParameter("window_start",new Date(),TemporalType.TIMESTAMP)
.setParameter("window_end",TemporalType.TIMESTAMP);
query.execute();
警告 o.h.e.jdbc.spi.SqlExceptionHelper -> SQL 错误:0,SQLState: 42P18 错误 o.h.e.jdbc.spi.SqlExceptionHelper -> 错误:无法 确定参数$2的数据类型
看起来像是 JDBC 驱动程序问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。