我想将所有具有文本标签设置的对象加载到我们数据库中的任何一个小但任意数量的值中。在SQL中解决这个问题的逻辑方法是构建“在”子句中。 JPQL允许IN,但似乎我需要指定每个参数直接(如(如:In(:In1,:in1,:In2,:in2,:in3)))。

是否有某种方法可以指定数组,或者应该将其套在子句中值展示的列表(或其他容器)?

有帮助吗?

解决方案

我不确定JPA 1.0,但您可以通过 Collection 在JPA 2.0中:

String qlString = "select item from Item item where item.name IN :names"; 
Query q = em.createQuery(qlString, Item.class);

List<String> names = Arrays.asList("foo", "bar");

q.setParameter("names", names);
List<Item> actual = q.getResultList();

assertNotNull(actual);
assertEquals(2, actual.size());

用Eclipselink测试。使用Hibernate 3.5.1,您需要用括号包围参数:

String qlString = "select item from Item item where item.name IN (:names)";

但这是一个错误,上一个示例中的JPQL查询是有效的JPQL。看 HHH-5126.

其他提示

Oracle限制为1000个参数。该问题已在4.1.7版中通过Hibernate解决 参见Jira HHH-1123

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top