Hibernate -> Criar uma Session auto-commit (Apenas 1 as outras n)

7 respostas
Lavieri

Como fazer para criar 1 session como auto-commit ?? gostaria de deixar apenas uma session assim no meu banco =/ … alguem tem 1 dica ??

tipo sessionFactory.openSession(autoCommitTrue);

alguem sabe como fazer ?

7 Respostas

mateusprado

Ola Lavieri !

Ja pensou em implementar um metodo que retorne uma Session, porem com AutoCommit ?!

Por exemplo:

public Session getUniqueSession() {

// implemente aqui o commit

}

E quando vc precisar usar o auto commit, vc chama o metod getUniqueSession(); que tera uma implementação de commit.

[ ]s,

Lavieri

Não é bem isso que vc falou… meu problema é que posso configurar no inicio, pra minha conexão com o banco de dados ser do tipo AUTO-COMMIT … nas configurações de hibernate, mais fazendo isso, todas as minha session sairiam com AUTO-COMMIT …

openSession() da session factory pode receber um argumento do tipo Connection,

ou seja, eu posso mandar uma conexão diferente da que o hibernate usa, com auto-commit ativo, mas não sei bem como fazer…

Marky.Vasconcelos

Voce pode ter duas SessionFactorys com o Hibernate… uma com auto-commit e a outra não.

Lavieri

so se eu for louco pra criar 2 sessionFactory o.O muito demorada… nem…

bom, pelo que vi, meu banco não fica auto-commit não sei o q é… setei auto-commit e naum vai =/

Marky.Vasconcelos

Tem uma propriedade que voce seta para o hibernate fazer isso…

Mas qual é sua intenção com esse auto-commit?

utilizar somente

session.update(object);

E ter ele atualizado sem abrir a transação e enviar?

Se for isso e voce tiver uma classe DAO voce pode criar um método que já fizesse isso no update… funcionaria do modo que falei mas faria sem o auto-commit por baixo dos panos.

Lavieri

Não tenho DAO, pq Hibernate não precisa de DAO ...

tenho 1 repositorio publico, que aceito qualquer tipo de entidade

Repositories.marge(Entity entity)
Repositories.persist(Entity entity)
Repositories.remove(Entity entity)
Repositories.refresh(Entity entity)

Existem 1 sessao publica, usada pra consulta... de forma rapida, não fico abrindo e fechando tranzações nessa sessão...

Eu tenho a possibilidade de criar sessões novas... e envialas para o repositorio na hora de persistir

Repositories.marge(Session newSession, Entity entity)
Repositories.persist(Session newSession, Entity entity)
Repositories.remove(Session newSession, Entity entity)
Repositories.refresh(Session newSession, Entity entity)

queria q a sessão publica fosse auto-comit ...

meu medo é o repositorio concorrentemente, kerer fazer tranzações, uma em um lugar falhar, na sessão public e ele dar rollback, em operação dos outros..

na sessão publica se for persitir, é pra fazer sem tranzaction... mas não ta dando certo =/

Edit.: ... atualmente meu Repositorio esta assim
public void persist(Object entity) throws NotEntityException,
            HibernateException, IllegalArgumentException {
        persist(SESSION, entity); //aqui se fosse auto-commit, não precisaria enviar para o outro método
    }

    public void persist(Session session, Object entity) 
            throws NotEntityException, HibernateException,
            IllegalArgumentException {
        if (session.getTransaction().isActive()) {
            session.persist(entity);
            return;
        }
        try {
            session.beginTransaction();
            session.persist(entity);
            session.getTransaction().commit();
        } catch (RuntimeException ex) {
            session.beginTransaction().rollback();
            throw ex;
        }
    }
Marky.Vasconcelos

É o que eu disse… disfarça o auto-commit

public void persist(Object entity) throws NotEntityException,
            HibernateException, IllegalArgumentException {
        SESSION.beginTransaction();
        SESSION.persist(entity);
        SESSION.getTransaction.commit();
    }

    public void persist(Session session, Object entity) 
            throws NotEntityException, HibernateException,
            IllegalArgumentException {
        if (session.getTransaction().isActive()) {
            session.persist(entity);
            return;
        }
        try {
            session.beginTransaction();
            session.persist(entity);
            session.getTransaction().commit();
        } catch (RuntimeException ex) {
            session.beginTransaction().rollback();
            throw ex;
        }
    }
Criado 24 de março de 2009
Ultima resposta 24 de mar. de 2009
Respostas 7
Participantes 3