我正在尝试找到使用Hibernate在mysql数据库中保存/检索文件的“正确”,可靠的方法。解决方案必须适用于相当大的文件,因此最小化内存占用很重要。
我的解决方案如下:
一个包含java.sql.Blob字段的模型类,getter带有“@Lob”注释。
我的解决方案如下:
一个包含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();
}
这是正确的方法吗?如果有许多同时上传和/或大文件,是否存在内存耗尽的风险?是否有更好的解决方案?
另外,我正在使用“通用数据访问对象”模式封装Hibernate,因此我不喜欢直接访问HibernateUtil,但到目前为止,我还没有想出一个很好的通用访问方式。欢迎提供建议。