Сохранить файл в базе данных MySQL, используя Hibernate - PullRequest
5 голосов
/ 07 марта 2011

Я пытаюсь выяснить «правильный», отказоустойчивый способ сохранения / получения файлов в базе данных 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, как здесь, но пока я не понял хороший общий способ получить к нему доступ. Предложения приветствуются.

1 Ответ

1 голос
/ 08 марта 2011

Хранение файлов в виде BLOB в вашей БД будет работать.Однако это может стать проблемой, когда вы начнете получать все больше и больше таких файлов в вашей БД.В зависимости от ожидаемого объема файлов, я бы порекомендовал вам вообще не хранить указанные файлы в вашей БД.

Возможно, рассмотрите возможность их хранения в репозитории контента, например Jackrabbit .Затем эти файлы доступны через URL-адрес, который сообщает вам, где они находятся в хранилище.

Итак, подведем итог: если вы действительно хотите, чтобы файлы в вашей БД, то то, что у вас звучит хорошо, вы можете просто убедиться, чтоу вас есть Hibernate ленивый груз эти капли, особенно если они могут стать довольно большими.Однако я бы порекомендовал вам хотя бы рассмотреть хранилище контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...