JavaでのBlobの取り扱い
だいたいOracle。
JDBC接続
JavaのJDBC接続でBlobからデータを取り出すときはResultSet#getBlob()を使用するけれども、
実はResultSet#getBytes()で直接byteとして取り出すこともできます。
Webシステムぐらいだと殆どの場合大きくても数Mbyteのファイルだと思うので、ResultSet#getBytes()を使用したほうが良いと思うのだが、使用例は少なそう。
Blobだとストリームとして取り出せるので、メモリにはやさしいのですが、そうする必要がある場合はそこまで多いのかな?
クライアントサイドに持ってくるまでにモデル層を超える必要があるので、Blobで取り出してもすぐにbyteに変換している場合が多そうですが。
JPA(Hibernate)
JDBCと同様にBlobとしてマッピングする方法とbyteとしてマッピングする方法の二つがあります。
byteだと2次キャッシュに大量のデータが含まれてしまうので、注意が必要です。
BlobだとEntityを取得した後にシリアル化するとBlobから値が取れなくなるため、シリアル化しないように注意する必要があります。(どう注意しろと・・・・)
こちらもキャッシュしない設定にした上でbyte[]にした方がいいんだろうなぁ。