Hibernar sessão aberta na visão: transação por solicitação?

Eu estou usando o Hibernate com Spring no Tomcat. Eu estive lendo e relendo as vezes apontou paraPágina wiki do JBoss sobre o tema, e isso tem sido útil. Mas isso me deixa com algumas perguntas.

A ideia de iniciar uma transação para cada pedido me incomoda. Eu acho que eu poderia limitar o filtro para certos controladores - talvez colocar todos os meus controladores que precisam de uma transação em um caminho pseudo "tx" ou algo assim. Mas não é uma má ideia usar transações se você não sabe se vai precisar de uma? E se eu estou apenas fazendo leituras em alguma solicitação - lê que muito provavelmente pode vir de um cache - não estou melhor sem uma transação?

Eu li posts mencionando como eles lidaram com as transações na camada de serviço, e gostaria de fazer isso com o Spring. Mas então como é o código do filtro? Eu ainda quero a sessão disponível na minha opinião por algum carregamento lento.

Se tudo que eu tenho que fazer é ligarsessionFactory.getCurrentSession() no meu filtro, como ele é "liberado" de volta para a fábrica da sessão para reutilização? (Eu esperava ver umsession.close() ou algo assim, mesmo ao usar transações.) Quem está dizendo à fábrica da sessão que essa sessão pode ser reutilizada?

Talvez seja obeginTransaction() chamada que liga uma determinada conexão de banco de dados a uma determinada sessão pela duração de uma solicitação? Caso contrário, uma sessão extrai conexões de banco de dados do pool conforme necessário, certo?

Obrigado pela sua paciência com todas as minhas perguntas.

(E se a sua resposta for um link para a documentação do Spring, você só vai me fazer chorar. Você não quer isso, não é? Eu vou pagar com dinheiro real se as pessoas pararem de responder perguntas relacionadas à Spring que caminho.)

questionAnswers(2)

yourAnswerToTheQuestion