getEntityManager()中不支持java why-IN子句。createNativeQuery
我使用eclipselink作为JPA,使用Oracle作为DB。我正在使用getEntityManager()。java中的createNativeQuery。在我的查询中,我想使用In子句,但它不起作用,也没有例外
从第页,用户将输入作为33688556239895423传递
示例查询
"select emp_name from emp where emp_id in ( ?id)"
query.setParameter("id", empBO.getEventIds());
我正在使用Java通过split和concat转换
336885,56239,895423 to '336885','56239','895423'
但这对我不起作用
我知道如果我们使用JPQL这将对我有用。选择本机的原因是避免为表创建模型对象
更新
我使用了JPQL查询,因为我需要快速交付代码。我已经试过第二个答案了。但没有结果。当我有空的时候,我会再试一次为什么IN不工作
# 1 楼答案
这不适用于JPA的原因与不直接适用于JDBC的原因相同——JDBC中缺乏对多值参数的支持
当JPQL processor看到
in (?id)
时,它会将其转换为一个其底层SQL引擎可以“理解”的表达式——通常是这样的:JDBC支持这一点,因此它执行时不会出错
如果要执行本机查询,需要自己进行转换。从您拥有的模板开始,为要发送的ID的数量插入问号,并将列表中的ID绑定到以下参数:
# 2 楼答案
您可以显示jpa的日志以查看代码中的请求
log4j.logger.org.hibernate=info<BR>
或者
您也可以尝试不使用括号:
“从emp where emp_id in?id中选择emp_name”
你确定
?
问候