Java JPA使用不同的参数重新执行相同的namedQuery

Java JPA使用不同的参数重新执行相同的namedQuery,java,jpa,openjpa,named-query,Java,Jpa,Openjpa,Named Query,我使用openJPA作为实现,我面临以下问题 在我们的一项服务中,我们使用namedQuery选择某个范围内的值,如下所示: query = "select xxx from xxx where xxx in (:param)" 此服务/查询由负责生成/提供此参数值的另一个进程调用。有时,由于不好的原因,这个过程会给我们一个长度大于DB2授权的最大长度的列表 所以我想知道我们是否有可能实现一个mecanism来自动将这个参数拆分成几个Vlaue列表,为每个内部列表执行这个namedQuery,

我使用openJPA作为实现,我面临以下问题

在我们的一项服务中,我们使用namedQuery选择某个范围内的值,如下所示:

query = "select xxx from xxx where xxx in (:param)"
此服务/查询由负责生成/提供此参数值的另一个进程调用。有时,由于不好的原因,这个过程会给我们一个长度大于DB2授权的最大长度的列表

所以我想知道我们是否有可能实现一个mecanism来自动将这个参数拆分成几个Vlaue列表,为每个内部列表执行这个namedQuery,然后在返回之前聚合结果

现在的主要问题是:我是否可以多次重复使用构建的TypedQuery来重新执行相同的请求,但使用不同的参数值

代码示例(对于示例,不是真实的或现有的代码):

typedqueryquery=em.createNamedQuery(“myQueryName”,MyClass.class);
foreach(…){
setParameter(…);
res=query.getResultList();
//重新执行查询,结果是否不同?
}

这是解决此类问题的正确方法吗?如果没有,是否有更好的方法(在性能方面)?

不,您不能这样做。您必须为每次执行重新创建
TypedQuery

您可以简单地将
query
放入
while
循环中。当然,当前代码在循环中获取查询,我只是问这个问题,以了解是否有可能更好(或没有)没有其他方法执行此查询?不能使用更简单的选择条件进行联接吗?如果我打破了这个SQL限制,我会有警钟响起。你能扩展你的答案吗(这个问题中有任何参数/代码)?真的吗?我可以使用我使用的JPA impl(DataNucleus JPA)重新执行一个命名查询,并且一切正常。也许您可以链接到JPA规范中的一行,该行说这不应该工作?我相当肯定,该规范没有解决这一点的行为。
TypedQuery<MyClass> query = em.createNamedQuery("myQueryName", MyClass.class);
foreach (...) {
   query.setParameter(...);
   res = query.getResultList();
   // Query re-executed and results are different ?
}