有两个不同的会话可以为您提供帮助:
如果您想在同一个用户的两个请求之间交换一个类似于您的语句的对象,而这些请求是并行运行还是一个接一个地运行,则通常将它们存储在
HttpSession中
HttpServletRequest。
您可以使用
SessionHibernate取消当前查询:
public void startLongRunningStatement() { EntityManager entityManager = ... // Aquire session Session hibernateSession = ((HibernateEntityManager) em.getDelegate()).getSession(); // Store the HibernateSession in the HttpSession HttpSession httpSession = servletRequest.getSession() httpSession.setAttribute("hibernateSession", hibernateSession); try { // Run your query Query query = mEntityManager.createNativeQuery(globalQuery.toString()); List<?> results = query.getResultList(); } finally { // Clear the session object, if it is still ours if (httpSession.getAttribute("hibernateSession") == hibernateSession) { httpSession.removeAttribute("hibernateSession"); } }}public void cancel() { // Get the Hibernate session from the HTTP session HttpSession httpSession = servletRequest.getSession() Session hibernateSession = (Session) httpSession.getAttribute("hibernateSession"); if (hibernateSession != null) { // Cancel the previous query hibernateSession.cancelQuery(); }}


