Hibernate AssertionFailure

时间:2011-05-03 10:05:24

标签: java sql-server hibernate

当我尝试将新实体保存到数据库时,出现以下错误:

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)
}
}

1 个答案:

答案 0 :(得分:1)

正如错误消息所示,它可能是由于在抛出异常后尝试使用会话引起的。确保您的代码不会吞没任何Hibernate异常。