Estou com um problema, na verdade é mais uma duvida. Tenho um sistema que estou ajustando, ja estava desenvolvido. Aii esta dando o seguinte erro:
Porem minha duvida é a seguinte. Este sistema roda na base de dados ORACLE e SQL Server 2005. No oracle nao estoura este erro e no sql server sim… aguem poderia me explicar oq esta havendo???
Sem ver o código a partir do qual a exception é lançada fica meio complicado.
O que pode ocorrer é, devido a configuração do sistema, o hibernate tenta instanciar a classe respectiva ao SQL Server através de reflection, porém, essa classe não é uma classe concreta e sim uma abstract ou uma interface.
H
Hebert_Coelho
Parece que foi mapeada uma classe abstrata e/ou interface e o Hibernate está tentando fazer um new nesse cara.
Se sim, faça o find em cima da classe que herda, se não, retire o abstract da classe.
L
liviaguedes
Aii tenho 2 classes que extendem dela… pessoa fisica e pessoa juridica… mas como é um sistema grande nao sei como alterar sem quebrar o codigo … aidna pq este sistema esta em producao em uma empresa…
H
Hebert_Coelho
Então ao invés de fazer a consulta esperando Pessoa, faça em cima do PJ ou PF.
L
liviaguedes
Ate aii é tranquilo… mas ainda sim nao entendo como funciona no oracle e no sql nao???
D
drsmachado
Creio que o problema não esteja diretamente ali, posta o código do método liberarAcessoRepo.findPessoasCadastradas(entity);
para vermos qual objeto faz o cast.
L
liviaguedes
Cara esse codigo é grande…
publicList<Pessoa>findPessoasCadastradas(Pessoaentity)throwsRepositoryException{List<Pessoa>entityList=null;try{if(logger.isDebugEnabled()){logger.debug("Pesquisando a entidade: "+entity);}StringBuildersql=newStringBuilder("SELECT e ");sql.append("FROM "+Pessoa.class.getSimpleName()+" e ");Listargs=newArrayList();PessoaFisicapf=null;PessoaJuridicapj=null;if(entity==null){sql.append("WHERE e.interna = ?");args.add(false);}else{// Verifica se objeto é um Pessoa Física para montar as querys de consultaif(PessoaFisica.class.equals(entity.getClass())){pf=(PessoaFisica)entity;if(pf.getCpf()==null&&pf.getNomeRazaoSocial()==null||pf.getCpf().equals("")&&pf.getNomeRazaoSocial().equals("")){sql.append("WHERE e.interna = ?");sql.append("AND e.tipo = ?");args.add(false);args.add(TipoPessoaEnum.FISICA);}else{if(pf.getCpf()==null&&pf.getNomeRazaoSocial()!=null||pf.getCpf().equals("")&&!pf.getNomeRazaoSocial().equals("")){sql.append("WHERE e.interna = ?");sql.append("AND e.nomeRazaoSocial like ? ");sql.append("AND e.tipo = ?");args.add(false);args.add("%"+entity.getNomeRazaoSocial()+"%");args.add(TipoPessoaEnum.FISICA);}else{if(pf.getCpf()!=null&&pf.getNomeRazaoSocial()==null||!pf.getCpf().equals("")&&pf.getNomeRazaoSocial().equals("")){sql.append("WHERE e.interna = ?");sql.append("AND e.cpf like ? ");sql.append("AND e.tipo = ?");args.add(false);args.add("%"+pf.getCpf()+"%");args.add(TipoPessoaEnum.FISICA);}else{sql.append("WHERE e.interna = ?");sql.append("AND e.cpf like ? ");sql.append("AND e.nomeRazaoSocial like ? ");sql.append("AND e.tipo = ? ");args.add(false);args.add("%"+pf.getCpf()+"%");args.add("%"+entity.getNomeRazaoSocial()+"%");args.add(TipoPessoaEnum.FISICA);}}}}else{// Verifica se objeto é um Pessoa Jurídica para montar as querys de consultaif(PessoaJuridica.class.equals(entity.getClass())){pj=(PessoaJuridica)entity;if(pj.getCnpj()==null&&pj.getNomeRazaoSocial()==null||pj.getCnpj().equals("")&&pj.getNomeRazaoSocial().equals("")){sql.append("WHERE e.interna = ?");sql.append("AND e.tipo = ?");args.add(false);args.add(TipoPessoaEnum.JURIDICA);}else{if(pj.getCnpj()==null&&pj.getNomeRazaoSocial()!=null||pj.getCnpj().equals("")&&!pj.getNomeRazaoSocial().equals("")){sql.append("WHERE e.interna = ?");sql.append("AND e.nomeRazaoSocial like ? ");sql.append("AND e.tipo = ?");args.add(false);args.add("%"+entity.getNomeRazaoSocial()+"%");args.add(TipoPessoaEnum.JURIDICA);}else{if(pj.getCnpj()!=null&&pj.getNomeRazaoSocial()==null||!pj.getCnpj().equals("")&&pj.getNomeRazaoSocial().equals("")){sql.append("WHERE e.interna = ?");sql.append("AND e.cnpj like ? ");sql.append("AND e.tipo = ?");args.add(false);args.add("%"+pj.getCnpj()+"%");args.add(TipoPessoaEnum.JURIDICA);}else{sql.append("WHERE e.interna = ?");sql.append("AND e.cnpj like ? ");sql.append("AND e.nomeRazaoSocial like ? ");sql.append("AND e.tipo = ? ");args.add(false);args.add("%"+pj.getCnpj()+"%");args.add("%"+entity.getNomeRazaoSocial()+"%");args.add(TipoPessoaEnum.JURIDICA);}}}}}}sql.append(" ORDER BY e.nomeRazaoSocial ");Objectparams[]=args.toArray();Queryquery=getEntityManager().createQuery(sql.toString());if(params!=null){for(inti=0;i<params.length;i++){query.setParameter(i+1,params[i]);}}entityList=newArrayList<Pessoa>(query.getResultList());// inicializa a coleção de emails para não dar lazyIniatializeExceptionfor(Pessoapessoa:entityList){Hibernate.initialize(pessoa.getEmails());Hibernate.initialize(pessoa.getTelefones());Hibernate.initialize(pessoa.getEnderecos());}returnentityList;}catch(Throwablee){logger.error(e.getMessage());thrownewRepositoryException("Erro na persistência de informações",e);}}
H
Hebert_Coelho
Issé mesmo.
Posta o método que o drsmachado pra gente continuar olhando. [=
H
Hebert_Coelho
Se vc debugar, o erro aparece em que linha?
M
MaYaRa_SaN
esse erro está bem estranho…
usar a lista de pessoa pra guardar o retorno do método não é pra dar problema porque ele usa polimorfismo.
tais testando o mesmo fonte para testar as 2 bases?
se nao, confirma se a versão do sistema usando oracle é a mesma do sql server.
L
liviaguedes
Olá MaYaRa_SaN,
Sim é a mesma versao, mudando apenas as bases de dados, as configuracoes devidas… pq é especifico de cada empresa…
H
Hebert_Coelho
Realmente a versão de um poderia estar diferente do outro.
L
liviaguedes
Bom a versao é a mesma tenho certeza… bom vou ver aki oq posso fazer… mas vlw gente pela ajuda…