This must be a very common question...

Moved my persistence over to Hibernate and as you expect this was a godsend
and only took a couple of hours.

Naturally, 2 weeks later I am still trying to get it to work ;)

I have managed to get it to work pretty well by switching cascade off
everywhere.

Leaving me with a problem of transactions...

The best solution reported on the internet (hibernate site) was to extend
the SentinelEngine and wrap all calls in a transaction.

The solution below was pretty naive and I was wondering if someone has a
better solution as I am guessing that someone has a better solution (I am
not using Spring yet).


public class SentinelEngine extends BaseEngine {

        private static final long serialVersionUID = 7768775316660511012L;
        
        protected void setupForRequest(RequestContext context) {

                super.setupForRequest(context);

                // Start a session and a transaction
                System.out.println("Building up the session and and starting
a transaction");
//              IDAOFactory datastore = AbstractDAOFactory.soleInstance();
//              datastore.getController().start();
//              Transaction transaction =
(Transaction)datastore.getController().beginTrasnsaction();
//              Visit visit = (Visit)getVisit();
//              if (visit == null) {
//                      visit = new Visit();
//              }
//              visit.setTransaction(transaction);
//              setVisit(visit);
        }

        protected void cleanupAfterRequest(IRequestCycle cycle) {

                super.cleanupAfterRequest(cycle);

                // Commit the transaction and clear down the session
                System.out.println("committing the transaction and tearing
down the session");
//              IDAOFactory datastore = AbstractDAOFactory.soleInstance();
//              Visit visit = (Visit)getVisit();
//              datastore.getController().commit(visit.getTransaction());
//              datastore.getController().finish();
//              visit.setTransaction(null);
        }
}



public class HibernateController implements IController {

        public void start() {
                SessionFactory.currentSession();
        }
        
        public Object getSession() {
                Session session = SessionFactory.currentSession();
                return session;
        }

        public Object beginTrasnsaction() {
                Session session = SessionFactory.currentSession();
                return session.beginTransaction();
        }

        public void commit(Object transaction) {
                ((Transaction)transaction).commit();
        }

        public void finish() {
                Session session = SessionFactory.currentSession();
                session.flush();
                SessionFactory.closeSession();
        }
}


-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 268.2.1/277 - Release Date: 8/03/2006
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to