我正在尝试找出使用 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/