Java 休眠错误-当前事务中止,在事务块结束之前忽略命令
我对该代码有一些问题:Java 休眠错误-当前事务中止,在事务块结束之前忽略命令,java,hibernate,Java,Hibernate,我对该代码有一些问题: private EntityManager entityManager; public EntityManager getEntityManager() { if (entityManager == null) { entityManager = Persistence.createEntityManagerFactory("pu-mypu").createEntityManager(); } return entityManag
private EntityManager entityManager;
public EntityManager getEntityManager() {
if (entityManager == null) {
entityManager = Persistence.createEntityManagerFactory("pu-mypu").createEntityManager();
}
return entityManager;
}
public <T> T get(Long id, Class<T> type) {
return getEntityManager().find(type, id);
}
简单的回答是,您的数据库上有一个操作引发的早期异常,并且您没有回滚与该操作相关的事务。 较长的一个遵循此示例。假设您有一种将对象保存到数据库中的方法:
public Serializable saveObject(E object) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction trans = session.beginTransaction();
try {
Serializable id = session.save(object);
session.flush();
trans.commit();
return id;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
现在,假设由于某些约束冲突(例如,唯一的主键重复),上述代码引发运行时异常。在catch块中,您可以看到我们没有回滚事务。从这一刻起,每次访问数据库都会导致“错误:当前事务被中止,…”错误。现在,您要做的是回滚每个失败的事务,以便应用程序和数据库保持同步:
public Serializable saveObject(E object) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction trans = session.beginTransaction();
try {
Serializable id = session.save(object);
session.flush();
trans.commit();
return id;
} catch (Exception e) {
e.printStackTrace();
session.flush();
trans.rollback();
return null;
}
}
检查您生成的SQL。。。可能由于某种原因出现了语法错误。它是否完整?
public Serializable saveObject(E object) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction trans = session.beginTransaction();
try {
Serializable id = session.save(object);
session.flush();
trans.commit();
return id;
} catch (Exception e) {
e.printStackTrace();
session.flush();
trans.rollback();
return null;
}
}