Estou obtendo este erro incessantemente durante a inha busca no banco de dados… estou trabalhando com JPA/SPRING/JSF (Visual).
Alguém pode dar uma mão?
Java.lang.IllegalArgumentException: object is not an instance of declaring class
6 Respostas
Então sem ver o código fica um pouco complicado avaliar o real motivo da ocorrência desse erro, contudo pelo visto você deve estar passando um objeto de uma instância diferente da esperada pelo método de busca
Tente dar uma revisada na lista de argumentos que esta passando para o método.
Qualquer coisa poste o código para o pessoal te ajudar mais efetivamente
if(textField2.getText()!=null && !textField2.getText().equals("")){
String c=textField2.getText().toString();
getFatdProvider().obterPorNGuerra©;
return null;
}
public void obterPorNGuerra(String nome) {
FatdList.clear();
if (fatdDao.obterPorNome(nome) != null) {
FatdList.add(fatdDao.obterPorNome(nome));
}
}
public List obterPorNome(String nome) throws DataAccessException{
Query query=getEntityManager().createQuery(“SELECT f FROM fatd f WHERE f.alunos.nguerra like :nome”);
query.setParameter(“nome”,"%"+nome+"%");
return query.getResultList();
}
Estes são fragmentos dos três arquivos responsáveis por esta solicitaçào…
Detalhe é que a entidade(object) Alunos é parte da fatd e possui o atributo nguerra…
Hello World
if(textField2.getText()!=null && !textField2.getText().equals("")){
String c=textField2.getText().toString();
getFatdProvider().obterPorNGuerra(c);
return null;
}
public void obterPorNGuerra(String nome) {
FatdList.clear();
if (fatdDao.obterPorNome(nome) != null) {
FatdList.add(fatdDao.obterPorNome(nome));
}
}
public List obterPorNome(String nome) throws DataAccessException{
Query query=getEntityManager().createQuery("SELECT f FROM fatd f WHERE f.alunos.nguerra like :nome");
query.setParameter("nome","%"+nome+"%");
return query.getResultList();
}
public void obterPorNGuerra(String nome) {
FatdList.clear();
List lista = fatdDao.obterPorNome(nome);
if (lista != null) {
FatdList.add(lista);
}
}
Outra sugestão é que você tente usar os generics adequadamente. A exceção que você está pegando é sintoma de erros de tipo, e os generics foram criados para reduzir este tipo de problema. Por vezes, só de você começar a acrescentar os generics, alguns bugs antes ocultos começam a se tornar bem visíveis no código-fonte, o que ajuda bastante na correção.
Obrigado pela dica, vc tem razão agilizou bastante, mas e essa coisa de generics? Vc poderia dar um exemplo?
Com generics, é usar List
Um List pode ser uma lista de qualquer coisa, possivelmente de algo que você não quer. Por exemplo, em uma lista de gatos, se no código você sem querer tenta adicionar um cachorro, o código compila e dá pau na execução.
No entanto se você tiver List
O seu código se tornaria algo deste tipo:
if(textField2.getText()!=null && !textField2.getText().equals("")){
String c=textField2.getText().toString();
getFatdProvider().obterPorNGuerra(c);
return null;
}
public void obterPorNGuerra(String nome) {
FatdList.clear();
List<Fatd> lista = fatdDao.obterPorNome(nome);
if (lista != null) {
FatdList.add(lista);
}
}
@SuppressWarnings("unchecked")
public List<Fatd> obterPorNome(String nome) throws DataAccessException{
Query query=getEntityManager().createQuery("SELECT f FROM fatd f WHERE f.alunos.nguerra like :nome");
query.setParameter("nome","%"+nome+"%");
return (List<Fatd>) query.getResultList();
}
Grato pela dica amigo… tem razão…