Pessoal,
Estou usando o plugin do Hibernate 4 para o Vraptor, onde ele abre a sessão e a transação no início da requisição e fecha no final, fazendo o commit ou rollback.
Porém, reparei se eu executar operações de save em objetos, e na mesma sessão eu usar o criteria para fazer uma consulta ele faz o “commit” antes dessa chamada pelo plugin do hibernate. É o comportamento normal do hibernate, que para manter confidencialidade dos dados, executa o commit de tudo que foi modificado na sessão para depois realizar a consulta?
Att
O comportamento padrão é fazer flush antes da consulta caso você tenha na fila operações de update/insert/delete.
O que você descreve como commit, não seria apenas um flush?
O flush ele executa o SQL que está na sessão, certo? E o commit, no caso, que também realiza o flush, faz o commit no banco.
Então é isso mesmo, quando chama o list do criteria ele executa o flush, e no caso os objetos que eu modifiquei na sessão serão atualizados no banco, né?
Essa dúvida era proveniente de uma outra, http://www.guj.com.br/java/288430-problema-com-constraintvalidationexception-index-unique-com-2-colunas-no-hibernate, se você tiver alguma ideia para me ajudar a solucionar isso eu agradeceria!
Att,
Flush somente executa os comandos no banco. Commit “salva” as alterações no banco, ficando acessível para todas as sessões.
Ainda não lí a outra thread, porém o flush dispara antes as validações do bean validator. Vou dar uma olhada na thread e qualquer coisa respondo lá.
como abrir uma transacao a partir de um determinado metodo?
o que você está usando? JPA, hibernate? algum plugin respectivo do vraptor?
estou usando hibernate, o plugin do vraptor é o do garcia-jj - https://github.com/garcia-jj/vraptor-plugin-hibernate4
O plugin abre e fecha a transação automatico para vocẽ, simulando o comportamento de um ambiente CMT.
eu consigo injetar a session no meu generic dao sem ser pelo construtor?
No vraptor3 a injeção de dependência só funciona pelo construtor.
mas no caso de eu ter um webservice que nao passa pelo meu controllador, ele vai para minha classe de regra de negocio, e que depois passa para meu dao, que recebe a Session no construtor, o vraptor vai instanciar? pq pelo que entendi isso so funciona quando o fluxo inicia do controllador.