Hibernate: version 3 (hibernate3.jar)
DB: mysql5.0
Problem: illegally attempted to associate a proxy with two open Sessions
I'm trying to update a table in the database using the session and I get the exception "org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions"
In each of my class I use a getSession() from a utility class called HibernateUtil to get session object. The getSession() method is like this:
public static Session getSession() {
if (_sessionFactory == null) {
_sessionFactory = new Configuration().configure().buildSessionFactory();
}
Session session = null;
try {
session = _sessionFactory.getCurrentSession();
} catch (HibernateException e) {
session = _sessionFactory.openSession();
}
return session;
}
The code where the exception is thrown is below, the exception occurs when the "s.update(inNode);" line is executed.
private void updateCostValue(Node inNode, BigDecimal costValue)
{
Cost tempCost;
tempCost = inNode.getnodeCost();
Transaction tr = s.beginTransaction();
try {
s.setFlushMode(FlushMode.ALWAYS);
if(tempCost == null)
{
tempCost = new Cost();
tempCost.setnonWeightedEstimatedCost(costValue);
s.save(tempCost);
HibernateUtil.commitSession(s);
// tried s.evict(inNode); s.merge(inNode); at this line
//looks like inNode is associted with other session
inNode.setnodeCost(tempCost);
s.update(inNode);
}
else {
tempCost.setnonWeightedEstimatedCost(costValue);
s.saveOrUpdate(tempCost);
}
tr.commit();
} catch(Exception e) {
tr.rollback();
e.printStackTrace();
}
HibernateUtil.commitSession(s);
}
Obviously, from the message I interpret that there are 2 active sessions which is a bad thing ofcourse, but I dont see how thats possible, as far as I know, I'm using the same session object? Anyone else has faced this problem? I found plenty of mention of this problem on google but none of the posted solutions helped me, so guys! throw some ideas my way!
The stacktrace is below:
Exception StackTrace
org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
at org.hibernate.proxy.AbstractLazyInitializer.setSession(AbstractLazyInitializer.java:68)
at org.hibernate.engine.PersistenceContext.reassociateProxy(PersistenceContext.java:520)
at org.hibernate.engine.PersistenceContext.unproxyAndReassociate(PersistenceContext.java:565)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:65)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:499)
at org.hibernate.impl.SessionImpl.update(SessionImpl.java:490)
at org.sjsu.edu.business.model.EstimatedCostManager.updateCostValue(EstimatedCostManager.java:163)
at org.sjsu.edu.business.model.EstimatedCostManager.updateLeafNodeCost(EstimatedCostManager.java:139)
at org.sjsu.edu.business.model.EstimatedCostManager.computeSECSICCost(EstimatedCostManager.java:197)
at org.sjsu.edu.presentation.EstimatedCostDisplay.actionPerformed(EstimatedCostDisplay.java:368)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Thanks,
Praveen
|