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

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>

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: