[Resolvido]Hibernate nested transactions not supported (como fechar uma transaction)

Ola galera antes de abrir o topico eu procurei muito aqui no forum e sites afins mas nao cheguei a uma soluçao

Uso Hibernate. 4.2.7 (mas vi q ja tem um nova atualizaçao)

É o seguinte quando vou gravar dados no Banco só posso fazer isso uma vez
se tentar gravar novamente dados (diferentes) me retorna a seguinte mensagem nested transactions not supported
como eu fecho uma transaction sem ter q fechar a session?
Tentei com o rollBack(); mas nao deu certo tbm
uma soluçao q fiz aqui foi de retirar a session do construtor da classe DAO
e inserir ela em todos os métodos, abrindo e fechando a mesma
so que dessa forma eu tenho um certo atraso(pouco mas Perceptível) ao ler e gravar no BD

Seria possivel começar uma nova transação aproveitando a mesma session que esta no construtor da classe?

Minha clase Util

private SessionFactory sessionFactory;
    private ServiceRegistry serviceRegistry;

    private SessionFactory getSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure();
        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
       
        return sessionFactory;
    }

    public Session getSession() {
        sessionFactory = getSessionFactory();
        return sessionFactory.openSession();
    }

Minha classe DAO

  public HibernateDAO() {
        session = new HibernateUtil().getSession(); //Aqui retorna uma Session em cada Instancia do HibernateDAO
    }



//

 public void inserir(Object classe) {
        Transaction t = null;
        try {
            t = session.beginTransaction();
            session.persist(classe);
            t.commit();
        } catch (Exception e) {
            Dialogs.create().lightweight()
                    .title("Erro!!!")
                    .masthead("Ops!! Ocorreu um erro")
                    .message("Detalhes")
                    .showException(e);
        }
//        t.rollback();

    }


public Object selecionar(Class object, String cep) { //Uso esse metodo para consultar um CEP, sem os métodos openSession e closeSession();
//essa consulta é instantânea, pq no construtor da classe eu ja inicio a session

       //openSession():
        Object obj = null;
        Transaction t = null;
        try {
            t = session.beginTransaction();
            obj = session.get(object, cep);

        } catch (Exception e) {
            Dialogs.create().lightweight()
                    .title("Erro!!!")
                    .masthead("Ops!! Ocorreu um erro")
                    .message("Detalhes")
                    .showException(e);
        } finally {
            t.rollback(); // colocando o rollback aqui posso fazer varias consultas

        }
        return obj;
            //closeSession();


    }


 public void openSession() {
        session = new HibernateUtil().getSession();
    }

 public void closeSession()  {
        session.close();
    }

Configuraçoes do Hibernate


<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/proescola?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">02041989</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property> 

O objeto Session não é thread-safe e não pode ser reaproveitado. O seu HibernateUtil.getSession() tem que ser dentro de cada método. Outro ponto é que, me parece que no seu código você não ta reaproveitando o objeto SessionFactory. Esse sim é thread safe e pode ser reaproveitado. Você não precisar criar uma instância dele toda hora que precisar de uma Session.

Da uma lida na documentação do Hibernate que acredito que tenha inclusive exemplos de como criar essa classe “HibernateUtil”.

OK vou dar uma lida mais profunda na documentação
qualquer duvida volto a postar aqui