Я пытаюсь выяснить «правильный», отказоустойчивый способ сохранения / получения файлов в базе данных mysql с использованием Hibernate. Решение должно работать с файлами довольно большого размера, поэтому было бы важно минимизировать объем занимаемой памяти.
Мое решение, пока что:
Класс модели, содержащий поле java.sql.Blob, метод получения помечен как "@Lob".
public static void main(String[] args) {
DAOFactory factory = DAOFactory.getFactory();
IResultExtraDAO resultExtraDAO = factory.getResultExtraDAO();
factory.getResultExtraDAO().beginTransaction();
ResultExtra resultExtra = new ResultExtra();
LobHelper lh = HibernateUtil.getSession().getLobHelper();
try {
File file = new File("/3030.jpg");
FileInputStream fis = new FileInputStream(file);
Blob b = lh.createBlob(fis, fis.available());
resultExtra.setFile(b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
resultExtraDAO.save(resultExtra);
factory.getResultExtraDAO().commitTransaction();
}
Это правильный способ сделать это? Где может быть риск исчерпания памяти, если есть
такое Мэнни одновременная загрузка и / или большие файлы? Есть ли другое решение, которое было бы лучше?
Кроме того, я использую шаблон Универсальный объект доступа к данным *1011* ', включающий спящий режим hincnate, поэтому мне не нравится прямой доступ к HibernateUtil, как здесь, но пока я не понял хороший общий способ получить к нему доступ. Предложения приветствуются.