java - 使用Hibernate将文件保存在mysql数据库中

标签 java mysql hibernate

我正在尝试找出使用 Hibernate 在 mysql 数据库中保存/检索文件的“正确”、故障安全方法。该解决方案必须处理非常大的文件,因此尽量减少内存占用量很重要。

到目前为止,我的解决方案:

包含 java.sql.Blob 字段的模型类,getter 用“@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();
}

这是正确的做法吗?如果有的话会不会有内存不足的风险 manny 是同时上传和/或大文件吗?还有其他更好的解决方案吗?

此外,我正在使用“Generic Data Access Object” ' pattern encapsule hibernate,所以我不喜欢像我在这里那样直接访问 HibernateUtil,但到目前为止我还没有想出一个好的通用方法来访问它。欢迎提出建议。

最佳答案

将文件作为 Blob 存储在您的数据库中是可行的。但是,当您开始在数据库中获取越来越多的此类文件时,这可能会成为一个问题。根据您期望的文件量,我建议您考虑根本不要将所述文件存储在您的数据库中。

也许考虑将它们存储在内容存储库中,例如 Jackrabbit .然后可以通过一个 URL 访问这些文件,该 URL 告诉您它们在存储库中的位置。

总而言之,如果您真的想要数据库中的文件,那么您所拥有的听起来不错,您可能只想确保您有 Hibernate 延迟加载这些 blob,尤其是当它们变得非常大时。但是,我建议您至少考虑一个内容存储库。

关于java - 使用Hibernate将文件保存在mysql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5220556/

相关文章:

java - 重新初始化变量

mysql - 添加没有外键约束的索引性能提升

mysql - 使用 Hibernate 查询缓存时的缓存更新

java - 如何使用java将doc、pdf、图片文件保存到mysql数据库?

java - 可能的内联 "pre-assignment"操作?

java - 如何保存具有自定义扩展名的文件?

java - 使用 jsoup 或 regex 提取 header 标签之间的 html 标签

mysql - 如何将每个sql结果存储在循环生成的数据帧中?

mysql - 将 gem mysql12 安装到 ruby​​ 时出错

java - 如何使用 Hibernate 检索 SQL 错误消息