我有一个看起来像这样的函数:
@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
}
我有个人,城市和用户对象。
当我尝试带人说50k时,就可以了。但是,如果我尝试使用15万个人,它只是没有完成,并给出EJBTransactionRolledBackException:事务回滚。我以0和5作为最大结果给出开始位置,因此它应该带来前5个人,但不会结束并给出例外。
我认为TypedQuery会带来所有结果,然后尝试获取前5个是问题的原因。但是另一方面,我不确定TypedQuery的工作原理。如果它能正常工作,它确实需要更新:D