These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: org.hibernate.HibernateException: PreInsertEventListener
PostPosted: Wed Sep 12, 2007 2:42 pm 
Beginner
Beginner

Joined: Thu Nov 16, 2006 11:34 am
Posts: 26
Location: Boston
Hibernate version: 3.1.x

Code between sessionFactory.openSession() and session.close():
I use OpenSessionInViewFilter
Full stack trace of any exception that occurs:
Code:
org.springframework.orm.hibernate3.HibernateSystemException: this instance does not yet exist as a row in the database; nested exception is org.hibernate.HibernateException: this instance does not yet exist as a row in the database
Caused by:
org.hibernate.HibernateException: this instance does not yet exist as a row in the database

at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:90)
at org.hibernate.event.def.DefaultRefreshEventListener.onRefresh(DefaultRefreshEventListener.java:39)
at org.hibernate.impl.SessionImpl.fireRefresh(SessionImpl.java:886)
at org.hibernate.impl.SessionImpl.refresh(SessionImpl.java:870)
at org.springframework.orm.hibernate3.HibernateTemplate$7.doInHibernate(HibernateTemplate.java:563)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3.HibernateTemplate.refresh(HibernateTemplate.java:557)
at org.springframework.orm.hibernate3.HibernateTemplate.refresh(HibernateTemplate.java:553)
at xxx.common.data.CommonDAO.save(CommonDAO.java:85)
at xxx.dao.agreement.AgreementDAO.save(AgreementDAO.java:192)
at xxx.business.agreement.AgreementManagerImpl.save(AgreementManagerImpl.java:262)
at xxx.business.agreement.AgreementManagerImpl$$FastClassByCGLIB$$e37e2c62.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:695)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
at xxx.business.agreement.AgreementManagerImpl$$EnhancerByCGLIB$$708c663e.save(<generated>)
at xxx.web.agreement.NewAgreementController.onSubmitInternal(NewAgreementController.java:73)
at xxx.web.EDAPBaseSimpleFormController.onSubmit(EDAPBaseSimpleFormController.java:32)


Name and version of the database you are using: Oracle 9i


I wrote an event listener for updating common fields like createdBy, updatedDate etc on all the Domain Objects

Code:


public class UpdateUserDateListener implements PreInsertEventListener, PreUpdateEventListener {

private static final Logger log = Logger.getLogger(UpdateUserDateListener.class);

public boolean onPreInsert(PreInsertEvent event) {
  Object obj = event.getEntity();
  boolean modified = false;
  if (obj instanceof IdObject) {
   log.debug("updating createUser, createDate, updateUser, updateDate");
   IdObject entity = (IdObject)obj;
   entity.setCreateUser(SecurityThreadLocal.get());
      entity.setCreateDate(Calendar.getInstance().getTime());
      entity.setUpdateUser(SecurityThreadLocal.get());
      entity.setUpdateDate(Calendar.getInstance().getTime()); 
      modified = true;
     }
  return modified;
}

public boolean onPreUpdate(PreUpdateEvent event) {
  Object obj = event.getEntity();
  boolean modified = false;
  if (obj instanceof IdObject) {
   log.debug("updating updateUser, updateDate");
   IdObject entity = (IdObject)obj;
   entity.setUpdateUser(SecurityThreadLocal.get());
      entity.setUpdateDate(Calendar.getInstance().getTime());     
      modified=true;
  }
  return modified;
}

}





The code for my CommonDao.save() is

Code:
 
public void save(Object transientInstance) {
        log.debug("saving Object instance:"+transientInstance);
        try {
          getHibernateTemplate().saveOrUpdate(transientInstance);
          getHibernateTemplate().flush();
          getHibernateTemplate().refresh(transientInstance);
          log.debug("save successful:"+transientInstance);
        } catch (RuntimeException re) {
          log.error("save failed", re);
          throw re;
        }
    }





I added the inteceptors in localSessionFactory of Spring app Context

Code:

<property name="eventListeners">
<map>
<entry key="merge">
<bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener" />
</entry>
<entry key="pre-insert">
<bean class="xxx.UpdateUserDateListener" />
</entry>
<entry key="pre-update">
<bean class="xxx.UpdateUserDateListener" />
</entry>
</map>
</property>


I can see in debug mode that, it does invoke the event handler just when I call a SomeDao.save() in my controller class. However it throws an exception after .refresh()


Any help to debug this, appreciated!


Top
 Profile  
 
 Post subject: Re: org.hibernate.HibernateException: PreInsertEventListener
PostPosted: Fri Nov 26, 2010 2:43 am 
Newbie

Joined: Tue May 18, 2010 5:39 am
Posts: 19
you definetly should not use entity object in the listener. You should try with the state object and then see if it works. I wrote an article on it at http://anshuiitk.blogspot.com/2010/11/h ... event.html. Consult this for more information and let me know how it goes.

_________________
AG
http://anshuiitk.blogspot.com


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.