У меня есть функция, которая выглядит так:
@PersistenceContext(unitName="persistence-unit")
private EntityManager em;
@Override
public List<Person> (Integer startPosition, Integer maxResult)
{
TypedQuery<Person> findAllQuery = em.createQuery("SELECT DISTINT p FROM Person p LEFT JOIN FETCH p.cityByCity LEFT JOIN FETCH p.userByUser ORDER BY p.id", Person.class);
if(startPosition != null){
findAllQuery.setFirstResult(startPosition);
]
if(maxResult!=null){
findAllQuery.setMaxResults(maxResult);
}
return findAllQuery.getResultList
}
У меня есть объекты персонажа, города и пользователя.
Когда я пытаюсь привести, скажем, 50 тысяч человек, все работает хорошо. Но если я попробую 150 тыс. Человек, он просто не завершится и выдаст EJBTransactionRolledBackException: транзакция откатывается. Я даю стартовую позицию как 0 и 5 как максимальный результат, поэтому он должен привести первых 5 человек, но это не заканчивается и дает исключение.
Я полагаю, что причиной проблемы является TypedQuery, приносящий все результаты и затем пытающийся получить первые 5. Но с другой стороны, я не уверен, что TypedQuery работает так. Если он работает так, ему действительно нужно обновление: D