0

私はHibernateのgetHibernateTemplate()、findByNamedQuery()を使用してSQL Serverのストアドプロシージャを実行しています(最適化の理由から)。ストアドプロシージャはLongのListを返すものとします。私が見ることができるものから、HibernateのfindByNamedQueryを使用してLongのリストを返すにはどうすればよいですか?

、私はそのようなリストを返すことができる唯一の方法は、具体的にHibernateのためのラッパークラスを作成し、私の@NamedNativeQuery宣言の一部でこれを使用することです:resultClassを= LongWrapper.class

されていますこれは本当にHibernateのfindByNamedQuery()関数を使ってlongのリストを返す唯一の方法ですか?

ストアドプロシージャが100万回に戻ってしまうので、メモリ割り当てとパフォーマンスを最適化する必要があります。したがって、既にラップされたLongsを自分自身のラッパークラスにラップするのは嫌です。不要なオーバーヘッドのようです。

提案がありますか?

ありがとうございます!

+0

からこのソリューションを持って、あなたは** findByNamedQuery()**他があります使用してSPを呼び出すことができます方法トンは、ストアドプロシージャフォームスプリングを呼び出します。あなたの質問はこの方法に関するものですか? – ManuPK

答えて

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