У меня есть приложение, которое использует спящий режим. В одной части я пытаюсь получить документы. Каждый документ имеет номер счета. Модель выглядит примерно так:
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
.
Или, альтернативно, каким-то образом, где я могу получать документы по одному из базы данных, используя режим гибернации, который соответствует моим критериям (вместо того, чтобы возвращать весь Список объектов, который использует слишком много памяти).