This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Object Relational Mapping and the fly likes session.save(Object myPojo) is not working Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Databases » Object Relational Mapping
Bookmark "session.save(Object myPojo) is not working" Watch "session.save(Object myPojo) is not working" New topic
Author

session.save(Object myPojo) is not working

Pankaj Patro
Ranch Hand

Joined: Apr 20, 2005
Posts: 35
Hi,

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


------

### This part for creating a record #####

public void createGroups(GroupsPOJO mypojo)
{

Transaction tx=null;
try {
Session session = sessionFactory.openSession();
tx = session.beginTransaction();
Serializable id = session.save(mypojo);
tx.commit();
session.close();
} catch (HibernateException e){
e.printStackTrace();
}

}


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
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: 35
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
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
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: 35
Hi Pascal,

if i use this
Transaction tx = session.beginTransaction();

//System.out.println("IS TRANSACTION "+tx.isActive());
session.save(mypojo);
tx.commit();
session.close();

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
@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
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 ?

pascal
Pankaj Patro
Ranch Hand

Joined: Apr 20, 2005
Posts: 35
but tx.commit() is not throwing any exception.

This is the exception showing in server(JBoss)

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
 
Similar Threads
session.flush()
Hibernate/Mysql - previous record(s) not being persisted.
Odd NullPointerException
Problem in Running Hibernate Sample application
hibernate sample done but no record inserted