我有一個使用休眠的應用程序。在一部分我試圖檢索文件。每份文件都有一個帳號。模型看起來是這樣的:休眠內存管理
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