所以,我正在使用Hibernate预处理语句来执行未知参数的未知SQL。 Prepared语句的参数设置如下:
statement.setObject(index, param.getValue(), param.getType());
//type is from java.ql.Types
在大多数情况下它运作得很好,但我有一个角落案例我既不能忽视也不能修复。 在SQL的情况下:
select to_char(:param, 'DD/MM/YYYY') from table;
Hibernate无法解析参数类型(对于statement.setDate(...)也是如此,因此它可能与设置参数无关)。 它返回以下错误:
“错误:函数to_char(未知,未知)不是唯一的提示:可以 不选择最佳候选功能。您可能需要添加显式 类型演员。位置:8“
类似的错误我可以像这样得到SQL,当我将参数类型设置为Date(但它适用于Number)
select :param
“错误:无法确定参数参数的数据类型”
有什么方法可以解决这个问题吗?
我知道的一种方法是手动演员,f。即
select to_char(cast(:param as Date), 'DD/MM/YYYY') from table;
但是由于应用程序可以获得任何类型的选择SQL,这是非常有问题的,因为任何一个客户端都需要执行此操作,或者需要实现一些转换系统,这将根据参数编辑SQL(这将花费很多时间,主要是在测试中)。还有更通用的方法吗?