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
范围内。