Transaction para SELECT no hibernate?

10 respostas
saoj

Por que os próprios caras do Hibernate dizem que tem que se usar transaction pra tudo no Hibernate, até para SELECT ?

É isso mesmo ? Não existe Session sem Transaction no Hibernate ?

Dêem uma olhada no HelloWorld do livro oficial do Hibernate aqui:

Código do link acima:

package hello;

import java.util.*;
import org.hibernate.*;
import persistence.*;

public class HelloWorld {
    
    public static void main(String[] args) {
        // First unit of work
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        Message message = new Message("Hello World");
        Long msgId = (Long) session.save(message);
        tx.commit();
        session.close();
        
        // Second unit of work
        Session newSession = HibernateUtil.getSessionFactory().openSession();
        Transaction newTransaction = newSession.beginTransaction();
        List messages = newSession.createQuery("from Message m order by m.text asc").list();
        System.out.println( messages.size() + " message(s) found:" );
    
        for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
            Message loadedMsg = (Message) iter.next();
            System.out.println( loadedMsg.getText() );
        }
        
        newTransaction.commit();
        newSession.close();
        // Shutting down the application
        HibernateUtil.shutdown();
    }
}

10 Respostas

velo

Vc não é obrigado a iniciar uma transação não.

VELO

saoj

Não é mas o próprio autor do Hibernate recomenda no primeiro exemplo do seu livro oficial. Aí é soda…

fmeyer

O fato do Christan ter usado um hello world mais completo foi justamente pra mostrar como pode ser feito, com transacoes e controle de sessao. Ja que o livro 'e escrito para pessoas que estao iniciando e precisam ver o poder do hibernate, tanto para pessoas que ja tem um profundo conhecimento em Camadas de persistencia.

Eu acho que um HelloWord minimalista soaria um pouco dump, para um livro tecnico avancado. e 'e isso que difere as publicacoes da manning do resto.

btw, quem conhece o Christian ou le seus posts no forum do hibernate sabe que ele 'e detalhista e direto ao mesmo tempo.

saoj

A questao eh que transacao para READ/SELECT nao faz o menor sentido, ou faz?

A

saoj:

A questao eh que transacao para READ/SELECT nao faz o menor sentido, ou faz?

Nao fazem o menor sentido.
Mas acho que ele quis mostrar que tem Session, Transaction, etc…
Foi so para demostrar o “poder”, mas voce nao precisar usar transaction para read/select.
Outra coisa, acho que nem vou mais me preocupar com transaction pois existe HibernateFilter/HibernateTransaction no meu framework predileto que faz isso por mim :wink:

abracos!

velo

Pode mostranto que você deve usar uma coisa que não tem necessidade? :roll: :roll: :roll:

VELO

A

Sim ué…porque não VELO?

As vezes as pessoas tem necessidade de mostrar o quanto seus trabalhos podem ser usados de N vezes.
Mesmo que seja o caso de “nao precisar” usar para isso ou tal coisa…

velo

Isso tah mais como uma deficiencia ou um texto mal escrito do que pra “poder”…

Poder precisar fazer que alé de desnecessária (usa recursos da aplicacao e do banco pra inicializar uma transaction) é feia, afinal, pra que um rollback num select, desleia os dados que eu jah li :S

A duvida do sergio eh procedente, eh algo sem sentido…

VELO

pcalcado

Duas palavras: repeatable read.

Não é porque você não usa algo que é inútil.

Deh

no capitulo 10 desse livro, que fala sobre Transctions ele fala assim

acredito que essa seja a resposta…
desculpem se me equivoquei…
Ateh!

Criado 20 de janeiro de 2007
Ultima resposta 14 de abr. de 2007
Respostas 10
Participantes 6