Currently I am facing this problem, when I am trying to insert a record to my existing underlying data base, through EJB->Hibernate,it is not working.
See the code:-
### THIS part is for creating a SessionFactory ###### private static final SessionFactory sessionFactory; static { try { // Create the SessionFactory from hibernate.cfg.xml sessionFactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } }
The createGroups method is running sucessfuly, but the session.save(mypojo) is not executing.
But in this application retreving is working sucessfully..see below Session session = sessionFactory.openSession(); // session.beginTransaction(); Criteria crit = session.createCriteria(mypojo.getClass()); Example example = Example.create(pojo); crit.add(example); myCollection = crit.list();
is running sucessfully.
Can any help from your side.
Thanks
Thanks & Regards,
Pankaj Patro
Jonathan Huang
Ranch Hand
Joined: Jun 23, 2006
Posts: 35
posted
0
If the object you're trying to save is already a persistant or transient object then .save will not work. Try saveOrUpdate. New items are saved while objects that are persistant need to be updated.
Pankaj Patro
Ranch Hand
Joined: Apr 20, 2005
Posts: 32
posted
0
Hi Jonathan Huang,
Thanks for your suggestion, now it is working both session.save(Object) and session.saveOrUpdate(Object) but I used another call back method session.flush() before session.close().
Is this session.flush() is mandatory to use?
pascal betz
Ranch Hand
Joined: Jun 19, 2001
Posts: 547
posted
0
no. hibernate flushes session before closing when you use transactions. check out the API doc for Session:
Force the Session to flush. Must be called at the end of a unit of work, before commiting the transaction and closing the session (Transaction.commit() calls this method). Flushing is the process of synchronising the underlying persistent store with persistable state held in memory.
pascal
nirumagics
Greenhorn
Joined: Jul 21, 2006
Posts: 15
posted
0
When we are performing Eaither save() or Update operations we are going to user session.saveOrUpdate(). For just saving we have to use session.save(); and followed by session.flush();
Pankaj Patro
Ranch Hand
Joined: Apr 20, 2005
Posts: 32
posted
0
Hi Pascal,
if i use this Transaction tx = session.beginTransaction();
runs sucessfully, but record is not inserting to data base. if I call tx.isActive() it throughs null pointer exception.
pascal betz
Ranch Hand
Joined: Jun 19, 2001
Posts: 547
posted
0
@nirumagics: the part i quoted is from hibernate API docs. fkush must be called in any way:
Flushing is the process of synchronising the underlying persistent store with persistable state held in memory
but if you use TX then the commit() will call flush() for you.
and btw: your name does not follow the java ranch naming policy (real name, two parts)
pascal betz
Ranch Hand
Joined: Jun 19, 2001
Posts: 547
posted
0
Aryan: if you get null pointer for tx.isActive(), then you would also get null pointer for tx.commit(). so i assume the NPE is somewhere else ? can you post the stacktrace ?
16:42:42,437 ERROR [LogInterceptor] RuntimeException in method: public abstract void com.tomax.ejb.groups.GroupsRemote.create Groups(com.tomax.domain.groups.GroupsPOJO) throws java.rmi.RemoteException: java.lang.NullPointerException at org.hibernate.transaction.CMTTransaction.isActive(CMTTransaction.java:87) at com.tomax.ejb.groups.GroupsEJB.createGroups(GroupsEJB.java:149) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.invocation.Invocation.performCall(Invocation.java:345) at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:149) at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:154) at org.jboss.webservice.server.ServiceEndpointInterceptor.invoke(ServiceEndpointInterceptor.java:54) at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:106) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:335) at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:166) at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:153) at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192) at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122) at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624) at org.jboss.ejb.Container.invoke(Container.java:873) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:805) at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:406) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294) at sun.rmi.transport.Transport$1.run(Transport.java:153) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:149) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701) at java.lang.Thread.run(Thread.java:595)
subject: session.save(Object myPojo) is not working