Sr(s),
Eu estou caminhando no hibernate e pintou uma dúvida (já procurada no google).
Eu tenho uma tabela Cliente, quando eu uso o sessao.delete(entidade) ele deleta a linha desde que tenha sido setado o ID dessa entidade acima, a pergunta é:
Se eu tenho por exemplo “delete from cliente where nome = ‘Joao’”
Eu tentei setar o nome (referente ao set de Cliente e usar o delete mais não foi, como eu faço pra trocar a cláusula where pelo hibernate ou até adicionar outras.
A mesma pergunta é valida para o método update.
Desde já agradeço.
Utilize Criteria e depois adicione as Restrictions.
Ex.:
<code>
@SuppressWarnings(“unchecked”)
public List<Etapa> verificaSeExiste(IEtapa pojo) throws HibernateException, PersistenceLayerException {
List<Etapa> listaEtapas = new ArrayList<Etapa>();
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(Etapa.class);
criteria.add(Restrictions.eq("nome",pojo.getNome()).ignoreCase());
listaEtapas = criteria.list();
return listaEtapas;
}
</code>
Muito grato pela atenção, agora eu obtive o seguinte erro:
Exception in thread “main” 14:53:13,784 DEBUG DefaultDeleteEventListener:61 - deleting a transient instance
org.hibernate.MappingException: Unknown entity: org.hibernate.impl.CriteriaImpl
at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:569)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1086)
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:63)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:579)
at model.Teste.main(Teste.java:22)
Eu tentei realizar:
Criteria criteria = session.createCriteria(Cliente.class);
criteria.add(Restrictions.eq("nome",cliente.get_nome()));
session.delete(criteria);
Acho que entendi:
Seria algo do tipo:
sessao.delete((Cliente) criteria.uniqueResult());
Pois funcionou, me corriga se estiver errado.
Pode ser assim também. Te mandei este exemplo, pois tem uma maior abrangência.
Cara…
Na boa, nessas condições, eu faço por HQL:
Query query = session.createQuery("DELETE FROM pacote.model.Contato as c WHERE c.nome = 'João'");
query.executeUpdate();
Um abraço