0

SQL Server でストアド プロシージャを実行するために (最適化のため)、Hibernate の getHibernateTemplate().findByNamedQuery() を使用しています。ストアド プロシージャは、Long のリストを返すことになっています。

私が見る限り、このようなリストを返す唯一の方法は、Hibernate 専用のラッパー クラスを作成し、これを @NamedNativeQuery 宣言の一部で使用することです: resultClass=LongWrapper.class

これは、Hibernate の findByNamedQuery() 関数を使用して long のリストを返す唯一の方法ですか?

つまり、ストアド プロシージャは 100 万近くの 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 に答える