java - TypedQuery 错误“未设置所有命名参数”。JPA/休眠
问题描述
我正在尝试构建和执行如下所示的动态查询:
String query = "SELECT e FROM Employee e WHERE (1=1) AND (UPPER(e.lastName) LIKE :lastName)";
final TypedQuery<Employee> dbQuery = entityManager.createQuery(query, Employee.class);
dbQuery.setParameter("lastName", "%" + value.toString().toUpperCase() + "%"));
但它失败并出现此错误:
org.hibernate.QueryException: Not all named parameters have been set: [lastName]
最有趣的是,在调试模式中,我可以看到 dbQuery 绑定了“lastName”参数,并在其“parameterRegistrations”字段中包含指定值。所以我不知道。
使用位置参数的替代方法
dbQuery.setParameter(1, "%" + value.toString().toUpperCase() + "%"));
不是我的情况,所以请不要讨论它。
这个问题与我的类似,但仍然没有答案。
解决方案
对不起大家!这是我的疏忽。那里有一个超级奇怪的遗留代码,它在很久以后根据我的查询创建了一个新的 TypedQuery 实例,但没有参数。我没想到。这就是原因。
推荐阅读
- sql-server - System.Data.SqlClient.SqlException:''''附近的语法不正确。'
- vb.net - vb.net 将数据从 BindingSource 保存到 db
- python-3.x - 如何更正值错误:未知标签类型“连续”
- python - 使用标准库从字符串中获取 MIME 类型
- gpflow - 如何让 GPFlow 在 Tensorflow 2 下运行?
- gml - Game Maker Studio 2 - 如何在控制同一个对象时赋予一个输入优先于另一个?
- flutter - 我升级了 Flutter(和 Dart),现在我无法让 WebApps 工作
- java - 在 Twilio 语音中,我如何拨打两个拨出电话并将两者连接在一起?
- rust - 使用 nom 以非零数字开头?
- typescript - 创建自定义对象的映射,我可以访问对象方法吗?(打字稿)