Pessoal,
Tenho tido problemas com o seguinte: quando a app inicializa, o seguinte bean que contém uma lista de objetos SalaDeReuniao é recuperado do banco, com o seguinte código:
public List getSalas()
{
String consulta = "select s from SalaDeReunioes as s";
Session sess = HibernateUtil.getSessao();
//busca das salas no bd
Transaction t = sess.beginTransaction();
Query q = sess.createQuery(consulta);
List salas = q.list();
t.commit();
//HibernateUtil.fechaSessao();
return salas;
}
Notem que HibernateUtil.fechaSessao(); está comentado porque ele diz que não pode fazer lazy load da lista de salas...
Ai eu tenho o seguinte código para atualizar uma das salas da lista:
public boolean atualiza(SalaDeReunioes sala)
{
Session sessao = HibernateUtil.getSessao();
Transaction t = sessao.beginTransaction();
sessao.update(sala);
t.commit();
HibernateUtil.fechaSessao();
return true;
}
Mas dá o seguinte erro:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
O HibernateUtil é adaptado do próprio manual do hibernate:
public class HibernateUtil {
private static Log log = LogFactory.getLog(br.uesc.apblopes.cooperedit.hibernateutil.HibernateUtil.class);
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
log.error("Não foi possível configurar o hibernate.", ex);
throw new ExceptionInInitializerError(ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session getSessao() {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void fechaSessao() {
Session s = (Session) session.get();
if (s != null)
s.close();
session.set(null);
}
}
E eu continuo sem saber onde fechar as sessoes hibernate....
Agradeço a ajuda de vcs.