0

我正在使用 Hibernate 的 getHibernateTemplate().findByNamedQuery() 来在 SQL Server 中执行存储过程(出于优化原因)。存储的过程应该返回一个多头列表。

从我所看到的,我可以返回这样一个列表的唯一方法是创建一个专门为 Hibernate 的包装类,并在我的 @NamedNativeQuery 声明的一部分中使用它:resultClass=LongWrapper.class

这真的是使用 Hibernate 的 findByNamedQuery() 函数返回 long 列表的唯一方法吗?

问题是,我需要优化内存分配和性能,因为存储过程将返回接近一百万个 long,所以我不愿意将已经包装的 Long 包装到我自己的包装类中。似乎是不必要的开销。

有什么建议么?

先感谢您!!

4

1 回答 1

1

您可以将方法重写为以下内容:

@SuppressWarnings("unchecked")
public List<Long> getIds() {
  Session session = getSession();
  Query namedQuery = session.getNamedQuery(QUERY_IDS);
  String queryForIds = namedQuery.getQueryString();
  SQLQuery query = session.createSQLQuery(queryForIds);
  query.addScalar("ID", Hibernate.LONG);
  List<Long> result = query.list();
  return result;            
}

我从how-do-i-use-hibernates-findbynamedquery-to-return-a-list-of-longs得到了这个解决方案

于 2012-09-17T16:05:42.407 回答