我有一个使用休眠的应用程序。在一部分我试图检索文件。每份文件都有一个帐号。模型看起来是这样的:休眠内存管理
private Long _id;
private String _acct;
private String _message;
private String _document;
private String _doctype;
private Date _review_date;
然后我用文档服务检索文档。代码的一部分是在这里:
public List<Doc_table> getDocuments(int hours_, int dummyFlag_,List<String> accts) {
List<Doc_table> documents = new ArrayList<Doc_table>();
Session session = null;
Criteria criteria = null;
try {
// Lets create a previous Date by subtracting the number of
// subtractHours_ passed.
session = HibernateUtil.getSession();
session.beginTransaction();
if (accts == null) {
Calendar cutoffTime = Calendar.getInstance();
cutoffTime.add(Calendar.HOUR_OF_DAY, hours_);
criteria = session.createCriteria(Doc_table.class).add(
Restrictions.gt("dbcreate_date", cutoffTime.getTime()))
.add(Restrictions.eq("dummyflag", dummyFlag_));
} else
{ criteria = session.createCriteria(Doc_table.class).add(Restrictions.in("acct", accts));
}
documents = criteria.list();
for (int x = 0; x < documents.size(); x++) {
Doc_table document = documents.get(x);
......... more stuff here
}
这如果我获取少量的文档的伟大工程。但是,当文件大小很大时,我得到一个堆空间错误,可能是因为文件占用大量空间,而当您检索数千个文件时,会发生不好的事情。
我真正想要做的就是检索符合我的标准的每个文档,获取帐号并返回一个帐号列表(一个比对象列表小得多的对象)。如果这是jdbc,我会确切知道该怎么做。
但在这种情况下,我很难过。我想我正在寻找一种方法,让我可以将Doc_table
对象的帐号恢复。
或者,我可以使用适合我的标准的hibernate从数据库一次检索一个文档(而不是将整个使用太多内存的对象列表回收)。
我是Hibernate的新手,所以我不知道如何使用投影。它像一个魅力。只是一个后续问题,如果您想要检索多个字段,该怎么办?投影语法如何工作? – Elliott 2011-01-26 18:15:37