Olá, estou apanhando ainda em Hibernate, então desculpem ae ignorância…
Estou fazendo mais ou menos assim:
Pego o id de uma lista, primeiramente eu faço uma consulta e mostro na tela:
session = HibernateUtil.getSession();
HibernateUtil.beginTransaction();
session.get(Classe.class,id);
HibernateUtil.commitTransaction();
session = HibernateUtil.desconectarSessao();
Mostro na tela os dados da classe, mas ae eu posso editar, entao eu faço um reconnect. O problema é q qnd eu uso o desconectarSessao() a sessao não desconecta e qnd dou o reconnect ele não reconecta pq não passa pelo (!isConnected). Meu HibernateUtil está assim:
…
public static Session getSession() {
Session s = (Session) threadSession.get();
// Abre uma nova sessão, se esta thread ainda não tem uma
try{
if (s==null){
s = sessionFactory.openSession();
threadSession.set(s);
}
}catch (HibernateException ex){
throw new InfrastructureException(ex);
}
return s;
}
public static void reconnect(Session session) throws InfrastructureException {
try {
if ((!session.isConnected()) && (session.isOpen())){
session.reconnect();
threadSession.set(session);
}
} catch (HibernateException ex) {
throw new InfrastructureException(ex);
}
}
public static Session desconectarSessao ()
{
try{
Session s = (Session) threadSession.get();
threadSession.set(null);
if (s != null)
{
if ((s.isConnected()) && (s.isOpen()))
{
s.disconnect();
}
}
return s;
}catch (HibernateException ex){
throw new InfrastructureException(ex);
}
}
Eu já debuguei e vi q qnd ele passa pelo s.disconnect() ele continua com o valor s.isConnected igual a true… Alguem sabe o q pode estar acontecendo. Existe alguma outra solução pra isso? :oops: