0

我想知道是否可以动态映射命名的本机查询,而不是取回 Object[] 列表,然后循环遍历并以这种方式设置对象。我有一个电话,我知道它会返回大量数据集,我希望能够将其正确映射到我的实体。我可以这样做还是必须继续循环遍历结果集。

这就是我现在正在做的......

List<Provider> ObjList = (List<Provider>) emf.createNativeQuery(assembleQuery(organizationIDs, 5)).getResultList();

那是我的实体,列表(我的实体是提供者)。通常我只会返回 aList<Object[]> 然后我会遍历它以取回所有对象并将它们设置为新提供者并将它们添加到列表中......

//List<Provider> provList = new ArrayList<Provider>(); 
/*for(Object[] obj: ObjList)
{
    provList.add(this.GetProviderFromObj(obj));
}*/

如您所见,我将代码的那部分注释掉以尝试此操作。我知道如果您将本机查询放在实体本身中,然后通过 createNamedQuery 调用它,您可以映射命名本机查询。我会这样做,但我需要使用INoracle 关键字,因为我有一个要检查的 ID 列表。它不仅仅是一个需要的。众所周知,原生查询不能in很好地处理关键字。有什么建议吗?

叹息,如果 NamedNativeQueries 只支持 IN 关键字就好了。

4

1 回答 1

1

假设 Provider 被配置为 JPA 实体,您应该能够将类指定为 createNativeQuery 调用的第二个参数。例如:

List<Provider> ObjList = (List<Provider>) emf.createNativeQuery(assembleQuery(organizationIDs, 5), Provider.class).getResultList();

根据文档,“至少,您的 SQL 必须选择类的主键列、鉴别器列(如果已映射)和版本列(如果已映射)。”

有关更多详细信息,请参阅OpenJPA 文档

于 2012-10-21T03:43:34.023 回答