Ajuda com HQL

2 respostas
S

Olá pessoal blz?
estou com um problema peguei um sistema para mim fazer uma melhoria, oque eu percebi que a consulta está demorando muito, ai montei ela no sql server e vi que o problema é mesmo a consulta ela está devolvendo dados duplicados segue a minha DAO.

public Collection<Recurso> getRecursos(Cidade cidade, PlanoSaude planoSaude, 
			TipoAtendimento tipoAtendimento, String palavraChave) {

		String hql = "FROM Recurso a " +
				"INNER JOIN a.recursoEspecialidades b " +
				"INNER JOIN a.recursoPlanosSaude c " +
				"WHERE a.unimed.cidade.id = :cidade " +
				"AND a.tipoAtendimento.id = :tipoAtendimento " +
				"AND c.planoSaude.id = :planoSaude " +
				"AND ( " +
				"a.nome LIKE :palavraChave " +
				"OR a.endereco LIKE :palavraChave " +
				"OR a.numero LIKE :palavraChave " +
				"OR a.complemento LIKE :palavraChave " +
				"OR a.telefone LIKE :palavraChave " +
				"OR a.bairro LIKE :palavraChave " +
				"OR a.cep LIKE :palavraChave " +
				")";

		Query query = getSession().createQuery(hql).setMaxResults(10);
		query.setParameter("cidade", cidade.getId());
		query.setParameter("tipoAtendimento", tipoAtendimento.getId());
//		query.setParameter("especialidade", especialidade.getId());
		query.setParameter("planoSaude", planoSaude.getId());
		query.setParameter("palavraChave", "%" + palavraChave + "%");

		Collection<Recurso> recursos = new ArrayList<Recurso>();
		Recurso recurso = null;

		for (int x = 0; x < query.list().size(); x ++) {
			Object[] array = (Object[]) query.list().get(x);   
			recurso = (Recurso) array[0];
			recursos.add(recurso);
		}

		return recursos;
	}

2 Respostas

C

Cara, vc poderia é retirar esse monte de OR.
Uma técnica que uma vez eu usei, e que foi útil, foi criar uma coluna a mais nessa tabela, que eu chamei de colunaFullDescription, e o valor que eu coloco nela são os valores das outras colunas concatenados.
Tipo, digamos que a sua coluna endereco e complemento contenham ‘Avenida Paulista’ e ‘Fundos’ respectivamente. A coluna colunaFullDescription conteria o valor ‘Avenida Paulista - Fundos’
Assim vc só faria um LIKE, e retiraria esse monte de OR.

proteus_adi

Colunas duplicadas em SQL normalmente condizem com relacionamentos incompletos / mal definidos.
Talvez seja o caso no HQL também…

Criado 13 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 2
Participantes 3