Olá pessoal. Estou fazendo alguns testes de performance com o Hibernate e reparei que se eu tetar fazer um delete de um objeto somente com id e com todos os outros nulos tenho que fazer um get do objeto para depois deletá-lo. O hibernate faz um select e depois faz um delete. Eu sei que quando os outros campos estão marcados como not-null ele é obrigado a fazer um get do objeto, mas sinceramente eu não entendo o porque disso.Com o hql que estou usando agora ele faz um delete sem select antes, porem é muito lento chegando a quase 2 segundos para um registro apenas. Isso é normal ? Quando mandei deletar todos os 40976 registros ele demorou somente 4 segundos.
protected Session getSession() {
return HibernateUtil.getInstance().getSession();
}
private Session session
public void deleteText(int id) {
Session s = getSession();
try {
s.createQuery("delete from Text text where text.oldId= :id")
.setParameter("id", id).executeUpdate();
s.getTransaction().commit();
} catch (HibernateException e) {
s.getTransaction().rollback();
e.printStackTrace();
} finally {
s.close();
}
}
Hibernate Util
[code]public class HibernateUtil {
private static HibernateUtil me;
private static SessionFactory sessionFactory = getSessionFactory();
protected static SessionFactory getSessionFactory() {
try {
return new Configuration().configure().buildSessionFactory();
} catch (Exception e) {
throw new IllegalStateException(
"Could not locate SessionFactory in JNDI");
}
}
public Session getSession() {
Session toReturn = sessionFactory.openSession();
toReturn.beginTransaction();
return toReturn;
}
public static HibernateUtil getInstance() {
if (me == null) {
me = new HibernateUtil();
}
return me;
}[/code]