- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 eclipse 链接作为 JPA,使用 Oracle 作为数据库。我在 java 中使用 getEntityManager().createNativeQuery 。在我的查询中,我想使用 IN 子句,但它不起作用,也没有异常(exception)。
从页面用户将输入传递为 336885,56239,895423
示例查询
"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 这会对我有用。选择 Native 的原因是为了避免为表创建 Model 对象。
我使用了JPQL查询,因为我需要快速交付代码。我已经尝试过这里发布的第二个答案。但没有结果。当我有空闲时间时,我会再次尝试为什么 IN 不起作用。
最佳答案
这不能与 JPA 一起工作的原因与不能直接与 JDBC 一起工作的原因相同 - JDBC 缺乏对多值参数的支持。
当 JPQL 处理器看到 in (?id)
时,它会将其转换为其底层 SQL 引擎可以“理解”的表达式 - 通常如下所示:
WHERE emp_id IN (?id_0, ?id_1, ?id_2, ...)
这是由 JDBC 支持的,因此执行时不会出错。
如果您想执行 native 查询,则需要自己进行此转换。从您拥有的模板开始,插入您要发送的 ID 数量的问号,并将列表中的 ID 绑定(bind)到这些参数:
StringBuilder queryStr = new StringBuilder("select emp_name from emp where emp_id in (");
int[] ids = empBO.getEventIds();
for (int i = 0 ; i != ids.length() ; i++) {
queryStr.append("?id_");
queryStr.append(i);
}
queryStr.append(")");
... // Construct your query, then...
for (int i = 0 ; i != ids.length() ; i++) {
query.setParameter("id_"+i, ids[i]);
}
关于java - 为什么 getEntityManager().createNativeQuery 不支持 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439757/
我正在构建一个不使用 JDO 与 google appengine 数据存储集成的 android 应用程序。 我正在尝试构建一个端点,以允许我访问我的数据存储中的数据。我正在编写的函数在下面,但我遇
作为 Symfony2 和 Doctrine 的新手,我正在为 getEntityManager() 之间的差异而苦苦挣扎(在自定义存储库类中)和 getManager() . 我知道 getEnti
现在我将 jpa 与 hibernate 一起使用,当我完成 getEntityManager.persist(objects) 时,我将要求用户确认,例如使用用户界面继续和回滚 private Li
我有一个正在使用 Symfony2 编码的应用程序。我创建了一个 Account 实体并使用注解创建了一个名为 AccountRepository 的存储库 在 AccountRepository 对
这两种说法有什么区别吗: $this->getDoctrine()->getEntityManager()->getRepository(); $this->getDoctrine()->getRep
我使用 eclipse 链接作为 JPA,使用 Oracle 作为数据库。我在 java 中使用 getEntityManager().createNativeQuery 。在我的查询中,我想使用 I
从版本 3.0.6 开始,他们明确删除了 getEntityManager () 方法,现在是 getManager ()。 如果您使用的是 3.0.0 版本,您不会有任何问题,但使用 3.0.6 或
我尝试从 composer 安装 doctrine2 orm,它成功了,我设置了我的 bootstrap.php,如下所示 'pdo_mysql', 'user' => 'root', 'p
我正在使用 needle test API 测试一个 Seam 应用程序。在我的代码中,我使用了 EntityHome 的 getEntityManager() 方法。当我针对内存数据库运行单元测试时
我是一名优秀的程序员,十分优秀!