Boa tarde a todos!
Pessoal queria fazer uma consulta no banco usando hibernate do seguinte modo:
select count(*) from cliente where nome like '%m%'
porém fiz dessa maneira e não funciona
public long countSearch(String c){
Query q = session.createQuery("select count(*) from Cliente where nome like %:caracter%");
q.setParameter("caracter", c);
return (Long) q.uniqueResult();
}
Alguem saberia me informar onde estou errando?
Desde já agradeço.
Bom, primeiro:
É sempre uma boa prática você fazer count(1) ao invés de count(*) pois assim ele só verifica a primeira coluna e não todas.
Segundo:
Dá para dar uma simplificada nesse select:
Terceiro:
Acho que se você fizer com Criteria fica mais fácil e dá para reaproveitar o código (supondo que queremos receber esses Clientes além de contá-los):
private Criteria buildCriteria(String nome) {
return session.createCriteria(Cliente.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));
}
public Long count(String nome) {
return (Long) this.buildCriteria(nome).setProjection(Projections.rowCount()).uniqueResult();
}
public List<Cliente> list(String nome) {
return this.buildCriteria(nome).list();
}
Aqui mostra esses e outros métodos: JPA Consultas e Dicas.