JPA/Hibernateを使用して数百万行のシンプルなJavaバッチを読み込みます。私の質問は、の最後の結果をどのようにしてScrollMode.FORWARD_ONLY
とすることができますか?Hibernate - ScrollMode.FORWARD_ONLYを使用してScrollableResultsの最後の要素を取得します。
isLast()
メソッドを使用すると、転送専用スクロールモードでは使用できません.ScrollMode.SCROLL_INSENSITIVEを使用すると、バッチのパフォーマンスが低下します。
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.Query;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.StatelessSession;
StatelessSession statelessSession = ((Session) em.getDelegate()).getSessionFactory().openStatelessSession();
Query query = statelessSession.createSQLQuery("MY_QUERY")
.setReadOnly(true)
.setFetchSize(Integer.valueOf(1000));
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
while (results.next()) {
...
//I need to extract a timestamp from the last record here
}
はあなただけ取得したクエリを使用して考えがあります代わりに最後の結果。 –
いいえ、私はまた、他の行と余分なクエリが必要なので、最後の要素を取得するだけで、既に重いバッチにあまりにも多くのオーバーヘッドを追加します。 –