В случае файлов с размером 10 мегабайт, думаю, можно использовать хибернейтовский блоб (Hibernate.createBlob(byte[]) или Hibernate.createBlob(InputStream)). В бине дожны присутствовать также геттеры и сеттеры для блоба (или acess=field в маппинге) и геттер на InputStream возвращаемый блобом.
blob.getBinaryStream();
Соответственно в маппинге можно писать что-то типа <property name="file"><column name="FILE" sql-type="BLOB" /></property>
В MSSQL image хранятся в виде кучи мелких элементов по 8к каждая, поэтому при передаче весь блоб в память не загружается (если, конечно, вы не конвертнули файл в byte[], а использовали InputStream), про Oracle не знаю, но проверить вполне возможно