Я пытаюсь использовать Исключения для обработки случая, когда пользователь ввел имя длиннее определенного количества символов. Если возникает исключение, я воспринимаю его как PersistenceException и предоставляю информацию пользователю.Losing EntityManager после исключения
EntityManagerFactory emf=(EntityManagerFactory)getServletContext().getAttribute("emf");
EntityManager em = emf.createEntityManager();
try
{
String name = request.getParameter("name");
if(name != null)
{
em.getTransaction().begin();
em.persist(new Guest(name));
em.getTransaction().commit();
}
...
}
catch(PersistenceException e)
{
request.setAttribute("valid", false);
}
Но после уведомления пользователя, мне еще нужно, чтобы перечислить все имена, которые вводятся в БД раньше, но в следующем сегменте:
finally
{
List<Guest> guests= em.createQuery("SELECT g FROM Guest g",Guest.class).getResultList(); }
я получаю:
org.hibernate.AssertionFailure: null id in com.guest.Guest entry (don't flush the Session after an exception occurs)
Когда я меняю часть «finally» на следующую, воссоздавая entityManager, я не получаю ошибку.
finally{
em = emf.createEntityManager();
List<Guest> guests= em.createQuery("SELECT g FROM Guest....}
Я также проверил его с Eclipse, отладчик, чтобы увидеть, если EntityManager это нормально, и я получил следующее:
Таким образом, даже мой EntityManager нормально, зачем мне нужно создать он снова не должен иметь эту ошибку?