001    package railo.runtime.orm.hibernate;
002    
003    import org.hibernate.Session;
004    import org.hibernate.Transaction;
005    
006    import railo.runtime.orm.ORMTransaction;
007    
008    public class HibernateORMTransaction implements ORMTransaction {
009            
010            private Transaction trans;
011            private Session session;
012            private boolean doRollback;
013            private boolean autoManage;
014    
015            public HibernateORMTransaction(Session session, boolean autoManage){
016                    this.session=session;
017                    this.autoManage=autoManage;
018            }
019    
020            @Override
021            public void begin() {
022                    if(autoManage)session.flush();
023                    trans=session.beginTransaction();
024                    
025            }
026    
027            @Override
028            public void commit() {
029                    // do nothing
030            }
031    
032            @Override
033            public void rollback() {
034                    doRollback=true;
035            }
036    
037            @Override
038            public void end() {
039                    if(doRollback){
040                            trans.rollback();
041                            if(autoManage)session.clear();
042                    }
043                    else{
044                            trans.commit();
045                            session.flush();
046                    }
047            }
048    }