Java ORA-01722中的where条件的编号无效
这是我的密码:Java ORA-01722中的where条件的编号无效,java,mysql,oracle,hibernate,named-query,Java,Mysql,Oracle,Hibernate,Named Query,这是我的密码: String sql=“UPDATE EmployeeEXT SET bonus=1,其中empId位于(:empId); Query Query=session.createSQLQuery(sql); setParameterList(“empIds”,employeeId); query.executeUpdate(); EmployeeEXT表结构类似 EmployeeEXT_ID Number(19) BONUS Number(5) EMPID
String sql=“UPDATE EmployeeEXT SET bonus=1,其中empId位于(:empId);
Query Query=session.createSQLQuery(sql);
setParameterList(“empIds”,employeeId);
query.executeUpdate();
EmployeeEXT表结构类似
EmployeeEXT_ID Number(19)
BONUS Number(5)
EMPID Number(19)
EmployeeEXT.java Pojo
Class EmployeeEXT {
private long employeeEXTId;
private long bonus;
private Employee emp; //Many-TO-ONE Relation
// setter and getter methods.
}
Hibernate参数列表设置empIds参数的长列表。
但甲骨文给出的ORA-01722号无效
我想原因是hibernate用一个cama分隔的长值替换了'empIds'参数,所以oracle觉得它是字符串,但当我发送单个值时,它工作了
同样的代码在MYSQL上运行良好
有人帮我处理hibernate查询参数列表。删除标记[Java]。并非所有MySQL代码都与Oracle兼容。您可以按说明使用
to_number
。to_number
仅适用于单个值,但在我的情况下,它可能包含多个值此变量的数据类型是什么employeeIds
?employeeIds
类型是ArrayList
,您可以尝试转换为ArrayList
像这样employeeIds.stream().map(Integer::valueOf).collect(collector.toList());
这也是为了检查您的Long
值是否确实在Integer
范围内。