传递多个值。获取 org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause

Posted

技术标签:

【中文标题】传递多个值。获取 org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause【英文标题】:Passing multiple values. getting org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause 【发布时间】:2017-04-01 21:15:00 【问题描述】:

我正在从文本文件中读取查询,并依赖于 UI 中的过滤器,我正在使用字符串缓冲区附加其他查询。。像上面一样传递多个 id 来获取数据

我得到嵌套异常是 javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet] 根本原因 java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字。

我正在使用 q.setParameter,它是 Java 持久性查询。所以我没有paramterList。因为值之间的逗号我得到了无效的数字。您能帮我在这里做什么来支持多个值并获取数据吗?

我的代码示例:

StringBuffer q = new StringBuffer();

 q.append(queryFromPropertiesFile);

if( model.getId()!=null && ! model.getId().isEmpty())
q.append(" and emp.id IN (:id)");

Query query = entity.createNativeQuery(q.toString());

query.setParameter("id", model.getId());

【问题讨论】:

请看***.com/questions/14296234/… 谢谢,但我想使用 Java.persistence.Query 而不是 org.hibernate.query.Query。 org.hibernate.query.Query 有 setParameterList。 【参考方案1】:

您需要传递一个List 对象(即,使用, 分隔符拆分您的字符串),然后将该ID 列表(List 对象)传递给setParameter,如下所示:

List<String> idsList = new ArrayList<>();
String[] ids = model.getId().split(",");
for(String id : ids) 
    idsList.add(id);


query.setParameterList("id", idsList);

【讨论】:

其实我想用setParameter,不是setParameterList。请指教 如果我使用 setParameter 我会得到同样的错误。先生,一切都没有改变。 当您使用setParameterList 时会发生什么?错误是什么? setParameterList 是我们可以从 org.hibernate.query.Query 使用的方法。但在这里我使用 javax.persistence.Query。我需要使用 javax.persistence.Query 并且它没有 setParameterList 谢谢你,先生,我做了一些改变,它开始工作了。非常感谢

以上是关于传递多个值。获取 org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询中的条件语句检查作为参数传递的多个值(列表)

从多个数据的线性回归中获取 y 轴截距和斜率,并将截距和斜率值传递给数据框

如何从多个单选组传递单选按钮值?如何解决返回第一个值?

如何在 jdbcTemplate 中为具有相同值的多个参数标记传递参数?

如何在android中使用api将多个选中的复选框值传递给服务器?

Django:视图如何从 url 获取多个值?