Erro ao gerar relatório com mais de um relacionamento - Chave Estrangeira

1 resposta
php7jsfjavascriptjava
J

Olá, pessoal, boa tarde! Quando gero o relatório de uma entidade sem relacionamento funciona. Entidade com mas de um relacionamento da erro de mapeamento. Estou com um problema, onde, não estou conseguindo gerar relatório em PDF. No eclipse o relatório Ireport é gerado corretamente sem da erro, mas quando chamo com a aplicação em funcionamento da erro. Estou pesquisando à 5 dias e não consigo resolver. Peço ajuda de vocês!!! Vou colocar todo fluxo da aplicação para ajudar no monitoramento do erro. Desde já obrigado!

Erro no console:

ADVERTÊNCIA: /pages/pessoa.xhtml @32,89 actionListener="#{pessoaBean.exportarPDF}":
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: cidade_codigo.
Caused by: net.sf.jasperreports.engine.JRException: Error retrieving field value from bean: cidade_codigo.Caused by: java.lang.NoSuchMethodException: Unknown property ‘cidade_codigo’ on class ‘class br.pro.sispro.migreja.domain.Pessoa’

Chamo o método, para exportar para PDF:

actionListener="#{pessoaBean.exportarPDF}"

Exportar para PDF:

public void exportarPDF(ActionEvent actionEvent) throws JRException, IOException{
		PessoaDAO pessoaDAO = new PessoaDAO();
		pessoas = pessoaDAO.listar();
		
		DataTable tabela = (DataTable) Faces.getViewRoot().findComponent("formListagem:tabela");
		Map<String, Object> filtros = tabela.getFilters();

		String nome = (String) filtros.get("nome");
		String cpf = (String) filtros.get("cpf");
		
		File jasper = new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/pessoa.jasper"));
		
		Map<String, Object> parametros = new HashMap<>();
		
		parametros.put("nome", "%"+nome+"%");	
		parametros.put("cpf", "%"+cpf+"%");
		
		JasperPrint jasperPrint = JasperFillManager.fillReport(jasper.getPath(), parametros, new JRBeanCollectionDataSource(this.pessoas));
		
		HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
		response.addHeader("Content-disposition","attachment; filename=jsfReporte.pdf");
		ServletOutputStream stream = response.getOutputStream();
		
		JasperExportManager.exportReportToPdfStream(jasperPrint, stream);
		stream.flush();
		stream.close();
		
		FacesContext.getCurrentInstance().responseComplete();			
	}

Chave estrangeira no Domain:
Chave estrangeira composição. Relacionamento (1:N), uma cidade pode ter muitas
pessoas e uma pessoa pode pertencer a uma cidade.
@ManyToOne
@JoinColumn(name="cidade_codigo",nullable = false)//obrigatorio
private Cidade cidade;
public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}


Relatório Pessoa: jrxml:

<queryString>
		<![CDATA[SELECT pessoa.bairro,
						pessoa.celular,
						pessoa.cep,
						pessoa.complemento,
						pessoa.cpf,
						pessoa.email,
						pessoa.id,
						pessoa.nome,
						pessoa.numero,
						pessoa.rua,
						pessoa.telefone,
						cidade_codigo
				FROM pessoa]]>
	</queryString>

/*Editei o trcho abaixo para efeito de vizualização aqui no forum*/
field name="bairro" class="java.lang.String"/>
	field name="celular" class="java.lang.String"/>
	field name="cep" class="java.lang.String"/>
	field name="complemento" class="java.lang.String"/>
	field name="cpf" class="java.lang.String"/>
	field name="email" class="java.lang.String"/>
	field name="id" class="java.lang.String"/>
	field name="nome" class="java.lang.String"/>
	field name="numero" class="java.lang.String"/>
	field name="rua" class="java.lang.String"/>
	field name="telefone" class="java.lang.String"/>
	field name="cidade_codigo" class="java.lang.Long"/>


textField isStretchWithOverflow="true">
					reportElement style="Detail" positionType="Float" x="706" y="0" width="90" height="18" uuid="d851a3b9-414f-4d04-bbc3-9b61bce98031"/>
					textElement>
						font fontName="Serif" size="11"/>
					/textElement>
					<textFieldExpression><![CDATA[$F{cidade_codigo}]]></textFieldExpression>
				/textField>

1 Resposta

adriano_si

Fala @JosueSantos,

“pessoa” é o nome de sua tabela ou o nome da entidade? Outra coisa, existe o campo cidade_codigo na tabela do banco de dados que a sua entidade mapeia?

Pelo seu erro: “Caused by: java.lang.NoSuchMethodException: Unknown property ‘cidade_codigo’ on class 'class br.pro.sispro.migreja.domain.Pessoa” ele está procurando um campo chamado cidade_codigo em sua classe e não existe um campo com esse nome. Você mapeou a entidade cidade.

Então, veja se em algum lugar, em um HQL ou JPQL, você não faz pessoa.cidade_codigo ao invés de pessoa.cidade.codigo.

Abraços e espero ter ajudado :wink:

Criado 26 de agosto de 2016
Ultima resposta 26 de ago. de 2016
Respostas 1
Participantes 2