当我尝试将新实体保存到数据库时,出现以下错误:
org.hibernate.AssertionFailure: null id in xxx.nameBean entry (don't flush the Session after an exception occurs)
在代码
生成 session.save(nameBean)
但是,“神奇地”它只出现在Production Server上。当我尝试在localhost上重现错误时,使用相同的代码和数据(使用生产服务器的数据库副本,通过bak文件),它可以正常工作。
它有什么用?
编辑:添加可能导致错误的代码。该代码的目标是保存bean并在同一事务中更新otherBean,因此如果错误的ocurrs进行回滚。
public class BeanDao extends ManagedSession {
public Integer save(Bean bean) {
Session session = null;
try {
session = createNewSessionAndTransaction();
Integer idValoracio = (Integer) session.save(bean);
doOtherAction(bean);
commitTransaction(session);
return idBean;
} catch (RuntimeException re) {
log.error("get failed", re);
if (session != null) {
rollbackTransaction(session);
}
throw re;
}
}
private void doOtherAction(Bean bean) {
Integer idOtherBean = bean.getIdOtherBean();
OtherBeanDao otherBeanDao = new OtherBeanDao();
OtherBean otherBean = otherBeanDao.findById(idOtherBean);
.
.
.
otherBeanDao.attachDirty(otherBean)
}
}
答案 0 :(得分:1)
正如错误消息所示,它可能是由于在抛出异常后尝试使用会话引起的。确保您的代码不会吞没任何Hibernate异常。