Bom dia qdo programei em swing usava o sessao.clear para remover o cache do hibernate, agora estou usando JEE + vraptor e o .clear não quer funcionar, acredito que o componente do vraptor necessite de alguma configuração.
se vc usa a session que veio do vraptor, a session é nova a cada requisição, daí vc não precisa dar o clear.
a session é do vraptor se vc recebeu no construtor e registrou o parametro packages do vraptor no web.xml apontando pro pacote que termina com hibernate.
C
Chaapolinn
Lucas
Tem algo muito estranho, quando eu altero algum registro no banco via o MysqlFront, e clico em atualizar no grid ou atualizo a página F5, o registro não é atualizado, se eu fechar o browser e executar o programa novamente mostra o registro atualizado corretamente.
@ComponentpublicclassPessoaDao{privatefinalCriadorDeSessionsession;publicPessoaDao(CriadorDeSessionsession){this.session=session;}publicList<Pessoa>getPessoas(intstart,intlimit){try{returnsession.getInstance().createQuery("from Pessoa order by nome").setFirstResult(start).setMaxResults(limit).list();}catch(Exceptione){JOptionPane.showMessageDialog(null,e.getMessage());returnnull;}finally{}}}
Lucas_Cavalcanti
(off) vc tem noção que esse JOptionPane vai aparecer só no servidor, certo?
vc tá usando transações na hora de salvar os dados?
C
Chaapolinn
(off) vc tem noção que esse JOptionPane vai aparecer só no servidor, certo?
kkk sei sim, so fiz ele para ver se estava entrando na exceção, mas vou refatorar o codigo dpois.
vc tá usando transações na hora de salvar os dados?
Na hora de salvar eu usarei transacao, em outros sistemas que desenvolvo mas em swing + hibenate eu uso. Neste caso os dados eu estou inserindo e alterando direto pelo mysql posteriormente irei implementar o CRUD.
Lucas_Cavalcanti
ao invés de usar o
public PessoaDao(CriadorDeSession session) {
this.session=session;
}
faça apenas:
public PessoaDao(Session session) {
this.session=session;
}
C
Chaapolinn
Lucas muito estranho, fiz a alteração que vc pediu e msm assim não funcionou!
Eu acho que o vRaptor não está me dando uma session nova a cada requisição, alterei o scopo da fabrica de sessao só de teste e o funcionou certinho como esperado.
Sei que essa alteracao não uma boa pratica devido a performace.
@Component//@ApplicationScoped@RequestScopedpublicclassCriadorDeSessionFactoryimplementsComponentFactory<SessionFactory>{privateSessionFactorysessionFactory;@PostConstructpublicvoidabre(){try{this.sessionFactory=newAnnotationConfiguration().configure().buildSessionFactory();}catch(Throwableex){// Log the exception. System.err.println("Initial SessionFactory creation failed."+ex);thrownewExceptionInInitializerError(ex);}}@PreDestroypublicvoidfecha(){this.sessionFactory.close();}publicSessionFactorygetInstance(){returnthis.sessionFactory;}}
Lucas_Cavalcanti
essa classe não pode ser request scoped… só a criador de session pode…
o melhor a fazer é remover esses dois component factories e registrar o componente do VRaptor que faz isso: