[Java] JPA and Java SE 8 Streams

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/jpa_and_java_se_8

大量の、本当に大量のデータセットをJPAを使って取得する場合、java.util.Listインスタンス内に収まるように結果セット全体を入れ込む必要があるので、用心する必要があります。そのため、大規模なデータセットには、アプリケーションを実行するサーバのメモリの制限に引っかかる可能性があります。
非常に大きな結果セットを伴うシナリオの場合、この制限を回避する上でページネーションが有効な場合があります。具体的には、以下の記事をごらんになってください。
How To Stream/Serialize JPA Result As JAX-RS Response For Large Data
http://www.javacodegeeks.com/2015/07/how-to-streamserialize-jpa-result-as-jax-rs-response-for-large-data.html
こうしたシナリオでは、本当はJava 8 Streamsが適しているのですが、残念ながら現在のJPA(JPA 2.1 - JSR 338)はJava 8以前に出たもののため、Streamsをサポートしていません。
JSR 338: JavaTM Persistence 2.1
https://jcp.org/en/jsr/detail?id=338
しかし、これはJPAの次のアップデートに対する潜在的なRFE(機能拡張依頼、Request for Enhancement)になるのは明らかです(以下のこの仕様に対するRFEをご覧ください)。
Add ability to stream the result of a query execution
https://java.net/jira/browse/JPA_SPEC-99?jql=project%20%3D%20JPA_SPEC
また、一部のJPA実装ではすでにJava 8 Streams(例えば、HibernateやEclipseLink)のサポートを追加し始めています。
Streams API for query result processing.
https://hibernate.atlassian.net/browse/HHH-9340
Bug 433075 - Stream API gets no results
https://bugs.eclipse.org/bugs/show_bug.cgi?id=433075
もう少し待って'JPA.next'のスコープがどうなるかを確認する必要があるでしょうが、みなさんはどう思われますか?Java SE 8 Streamsが'JPA.next'でサポートされるのを見てみたいですか?

0 件のコメント:

コメントを投稿