用Hibernate做一个“ IN”查询

我有一个字符串中的ID列表,并且想使用Hibernate来获取具有这些ID的行。TrackedItem是一个Hibernate /

JPA实体(对不起,如果我在这里混淆了命名)。

我的代码是:

String idsText = "380, 382, 386";

ArrayList<Long> ids = new ArrayList<Long>();

for (String i : idsText.split(","))

{

ids.add(Long.getLong(i));

}

List<TrackedItem> items = TrackedItem.find("id IN (?)", ids).fetch();

但这失败了: JPAQueryException occured : Error while executing query from

models.TrackedItem where id IN (?): java.util.ArrayList cannot be cast to

java.lang.Long

如何使IN零件工作?谢谢。

回答:

JPQL查询的语法不正确。两种使用(带有位置参数):

List<Long> ids = Arrays.asList(380L, 382L, 386L);

Query query = em.createQuery("FROM TrackedItem item WHERE item.id IN (?1)");

query.setParameterList(1, ids)

List<TrackedItem> items = query.getResultList();

或(使用命名参数):

List<Long> ids = Arrays.asList(380L, 382L, 386L);

Query query = em.createQuery("FROM TrackedItem item WHERE item.id IN :ids");

query.setParameterList("ids", ids)

List<TrackedItem> items = query.getResultList();

以下是JPA 1.0规范中有关参数的相关部分:

4.6.4.1位置参数

以下规则适用于位置参数。

  • 输入参数由问号(?)前缀指定,后跟一个整数。例如:?1
  • 输入参数从1开始编号。

    请注意,同一参数可以在查询字符串中多次使用,并且查询字符串中参数的使用顺序不必与位置参数的顺序一致。

4.6.4.2命名参数

命名参数是一个以“:”符号为前缀的标识符。它遵循第4.4.1节中定义的标识符规则。命名参数区分大小写。

例:

SELECT c

FROM Customer c

WHERE c.status = :stat

第3.6.1节介绍了用于绑定命名查询参数的API

以上是 用Hibernate做一个“ IN”查询 的全部内容, 来源链接: utcz.com/qa/427965.html

回到顶部