我想知道是否可以动态映射命名的本机查询,而不是返回Object []的列表,然后循环并以这种方式设置对象。我有一个电话,我知道生病了返回一个海量数据集,我希望能够将它映射到我的实体。我可以这样做,还是必须继续循环遍历结果集。
以下是我现在正在做的事情......
List<Provider> ObjList = (List<Provider>) emf.createNativeQuery(assembleQuery(organizationIDs, 5)).getResultList();
这是我的实体,List(我的实体是提供者)。通常我只会返回一个List<Object[]>
然后我会遍历它以取回所有对象并将它们设置为新的提供者并将它们添加到列表中....
//List<Provider> provList = new ArrayList<Provider>();
/*for(Object[] obj: ObjList)
{
provList.add(this.GetProviderFromObj(obj));
}*/
正如你所看到的,我评论了代码的一部分来试试这个。我知道如果将本机查询放在实体本身中然后通过createNamedQuery调用它,则可以映射命名本机查询。我会这样做,但我需要使用IN
oracle关键字,因为我有一个我要检查的ID列表。它不仅仅是需要的。众所周知,原生查询不能很好地处理in
关键字。有什么建议吗?
叹气,如果NamedNativeQueries只支持IN关键字。
答案 0 :(得分:1)
假设Provider被配置为JPA实体,您应该能够将该类指定为createNativeQuery调用的第二个参数。例如:
List<Provider> ObjList = (List<Provider>) emf.createNativeQuery(assembleQuery(organizationIDs, 5), Provider.class).getResultList();
根据文档,“至少,您的SQL必须选择类的主键列,鉴别器列(如果已映射)和版本列(如果已映射)。”
有关详细信息,请参阅OpenJPA documentation。