Hibernate, Clausula Where

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&lt;Etapa&gt; listaEtapas = new ArrayList&lt;Etapa&gt;();

	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