【发布时间】:2015-08-13 20:02:37
【问题描述】:
我正在尝试使用异常来处理用户输入的名称超过特定字符数的情况。如果发生异常,我将其捕获为 PersistenceException 并向用户提供信息。
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);
}
但是在通知用户之后,我仍然需要列出之前输入到db的所有名称,但是在以下段中:
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)
当我通过重新创建 entityManager 将“finally”部分更改为跟随时,我没有收到错误。
finally{
em = emf.createEntityManager();
List<Guest> guests= em.createQuery("SELECT g FROM Guest....}
我还用 Eclipse 调试器检查了 EntityManager 是否正常,结果如下:
所以,即使我的 EntityManager 没问题,为什么我需要再次创建它才能没有那个错误?
【问题讨论】:
标签: java hibernate exception jpa entitymanager