何百万もの画像を主要なコンテンツとして含むデータベースに支えられた Web アプリケーションを開発しています。Spring MVC を使用して Java で記述しており、JPA (EclipseLink) を使用して Oracle 11g (11.2.0.1.0) データベースに接続しています。Web サーバー (Tomcat を実行) とデータベース サーバーは別のマシンです。
現在、オブジェクト モデルに次のコードがあります。
@Lob @Basic(fetch=FetchType.LAZY)
@Column (name = "data_file")
private byte[] dataArray;
これにより、テーブルに BLOB 列が作成されます。便利なことに、Oracle SQL 開発者を使用してデータベースから画像を直接表示できます。
問題は、Web アプリで画像を表示するには、実際のファイルが必要であり、その上に、Spring ではこのファイルが Web アプリ ディレクトリにあるか、少なくともアクセスを許可するように特別に構成した他の場所。これは、画像をユーザーに表示するために、画像の一時的なコピーを作成する必要があることを意味します。データベースと Web アプリの両方にアクセスできる 1 つの場所にのみイメージを配置し、可能であれば、他のプログラムまたはマシン ユーザーによる読み取りアクセスを許可したいと考えています。
BFILE 型は、外部ファイルやリモート ファイルをデータベースで管理できるように設計されていると思います。BFILE を JPA で使用できますか? また、それは私のニーズを満たしますか? その場合、BFILE 列へのマッピングを作成するにはどうすればよいですか?
私の目標は次のとおりです。
- 画像を表示するためにコピーする必要はありません。
- Oracle では、ファイルは (文字列パスではなく) ファイルとして管理されます。
- JPAを使用できます。
- ファイルは、読み取りアクセスが許可されている通常のディスクの場所にあります。
- Oracle SQL Developer で画像を表示できます。