Olha eu aqui de novo espero não ter que criar nenhum tópico novo para isso
Tenho que fazer uma consulta bem grande tenho as entidades:
Documento:
codigo
titulo
tipo
ano
area(referencia area)
curso(referencia curso)
instituicao(referencia instituicao)
Area:
codigo
area
Curso:
codigo
curso
Instituicao
codigo
nome
sigla
ai eu quis fazer esse método:
public List<Documento> pesquisa(Documento documento) {
System.out.println("inicia DAO");
System.out.println("Titulo " + documento.getTitulo());
System.out.println("Ano " + documento.getAno());
System.out.println("Tipo " + documento.getTipo());
List<Documento> resultado = new ArrayList<Documento>();
Map<String, Object> valores = new HashMap<String, Object>();
String consulta = "SELECT d FROM Documento d left join fetch d.area left join fetch d.curso left join fetch d.instituicao WHERE ";
if (documento.getTitulo() != null) {
consulta = consulta + "d.titulo = :titulo";
valores.put("titulo", "%" + documento.getTitulo() + "%");
}
if (documento.getTipo() != null) {
consulta = consulta + " OR d.tipo = :tipo";
valores.put("tipo", documento.getTipo());
}
if (documento.getAno() != null) {
consulta = consulta + " OR d.ano = :ano";
valores.put("ano", documento.getAno());
}
if(documento.getArea() != null){
consulta = consulta + " OR d.area = :area";
valores.put("area", documento.getArea());
}
if (documento.getCurso().getCurso() != null) {
consulta = consulta + " OR d.curso = :curso";
valores.put("curso", documento.getCurso().getCurso());
}
if (documento.getInstituicao().getSigla() != null) {
consulta = consulta + " OR d.instituicao = :sigla";
valores.put("sigla", documento.getInstituicao().getSigla());
}
System.out.println("a consulta: " + consulta);
try {
Query query = em.createQuery(consulta);
for (Entry<String, Object> valor : valores.entrySet()) {
query.setParameter(valor.getKey(), valor.getValue());
}
resultado = query.getResultList();
} catch (Exception e) {
System.out.println("erro ao realizar a consulta: " + e.getMessage());
}
System.out.println("fim DAO");
return resultado;
}
mas quando eu executo da esse erro:
erro ao realizar a consulta: You have attempted to set a value of type class java.lang.String for parameter sigla with expected type of class modelo.Instituicao from query string SELECT d FROM Documento d left join fetch d.area left join fetch d.curso left join fetch d.instituicao WHERE d.titulo = :titulo OR d.tipo = :tipo OR d.ano = :ano OR d.area = :area OR d.curso = :curso OR d.instituicao = :sigla.
creio que o erro esta na minha consulta o que vocês acham?