Hol*_*olm 5 java mysql hibernate
我正试图找出使用Hibernate在mysql数据库中保存/检索文件的'正确',故障保护方法.该解决方案必须处理非常大的文件,因此最小化内存占用将非常重要.
到目前为止我的解决方案:
包含java.sql.Blob字段的模型类,使用"@Lob"注释的getter.
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();
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?如果有manny simultanious上传和/或大文件,是否有可能用完memmory?还有其他解决方案会更好吗?
另外,我正在使用' 通用数据访问对象 '模式封装hibernate,所以我不喜欢像我这样直接访问HibernateUtil,但到目前为止我还没有想出一个很好的通用方法来访问它.欢迎提出建议.
将文件作为 Blob 存储在数据库中是可行的。但是,当您开始在数据库中获取越来越多的此类文件时,这可能会成为一个问题。根据您期望的文件量,我建议您考虑根本不在数据库中存储所述文件。
也许考虑将它们存储在内容存储库中,例如Jackrabbit。然后可以通过 URL 访问这些文件,该 URL 告诉您它们在存储库中的位置。
总而言之,如果您确实想要数据库中的文件,那么您所拥有的听起来不错,您可能只想确保 Hibernate 延迟加载这些 blob,尤其是当它们变得相当大时。但是,我建议您至少考虑一个内容存储库。
| 归档时间: |
|
| 查看次数: |
6071 次 |
| 最近记录: |