Когда я пытаюсь сохранить новый объект в базе данных, у меня появляется следующая ошибка:
org.hibernate.AssertionFailure: null id in xxx.nameBean entry (don't flush the Session after an exception occurs)
создается с кодом
session.save(nameBean)
, но "волшебным образом" это толькопоявляется на производственном сервере.Когда я пытаюсь воспроизвести ошибку на локальном хосте, с тем же кодом и данными (используя копию БД Production Server, через файл bak), она работает нормально.
Что это может быть?
РЕДАКТИРОВАТЬ: Добавление кода, который, вероятно, вызывает ошибку.Целью этого кода является сохранение компонента и обновление другого компонента в той же транзакции, поэтому, если что-то не так, происходит откат.
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)
}
}