Como criar classe generica para gerar relatório Jasper usando apenas HashMap e o local do arquivo Jasper?

Galera blz ?

Sou novo no desenvolvimento de Relatórios e tentei achar um tópico que ensine a como criar uma sql com inner join trazendo dados de várias tabelas, encontrei muitos tutoriais ensinando a criar uma lista e não preciso de lista. Preciso trazer apenas um registro envolvendo várias tabelas, Por exemplo: Nome, endereço, unidade, etc… preciso de ajuda urgente galera, se alguém puder me ajudar com um tutorial ou algum vídeo, sou bastante grato, caso a explicação tenha ficado um lixo, eu posso tentar explicar melhor a situação.

Valeu.

Como estão os dados no seu banco? O nome, endereço e unidade estão em tabelas separadas?

Opa !

Então Abner, os dados estão tudo separados e algumas tabelas não possui id para poder fazer um select juntamento com o Join Entende ? então gostaria de implementar usando uma hash map, mas não sei por onde posso começar pois não tenho nenhum código fonte como referência.

Olha, eu aconselho vc colocar um auto incremento, você vai precisar e vai evitar fazer gambiarras.

Mas vc pode fazer o inner com outras colunas, unidade/hoje/etc…

Tipo só pra tentar explicar melhor, Tenho no banco uma tabela que se chama Unidade, nela contém uma coluna que se chama CID, endereco e etc. Já em outra tabela tenho o contrato a onde consigo informações como cnpj e etc, mas nada que liga a está tabela da unidade saca ?

Entendi, se você já tem dados preenchidos na sua tabela, vc pode criar a coluna ID (Auto Increment) e depois relacionar as tabelas, tipo:

Tabela Contrato:
id (AI)
unidade_id (int)
.
.
.
.

Tabela unidade:
id (AI)
endereco
CID
.
.
.

E na hora de salvar o contrato, vc relaciona ele à alguém, exemplo:

Vou salvar os dados do usuário MalucoDoido, eu já tenho vc cadastrado, então só pego o seu id e na hora de cadastrar na tabela contrato, eu salvo o seu id no unidade_id.

Se você criar a coluna AUTO INCREMENT depois de ter os dados preenchidos, ela se adapta aos valores já. Não precisa ficar colocando os dados, já cria “sozinho”.

Man já consegui resolver essa situação dos dados, vou passar os dados via parâmetros usando uma hashmap, agora estou precisando de uma referência de como criar uma classe genérica de relatório passando apenas por parâmetro o meu hashMap e o caminho do meu arquivo jasper.

Segue o meu método que já está um pouco implementado.

public void gerarRelatorio(HashMap<String, Object>map) throws Exception {

	InputStream stream = this.getClass().getResourceAsStream("/relatorios/teste.jasper");

	JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(stream);
	baos = new ByteArrayOutputStream();
	
	
    JasperPrint print = JasperFillManager.fillReport(relatorioJasper, map);
    JasperExportManager.exportReportToPdfStream(print, baos);

    response.reset();
    response.setContentType("application/pdf");
    response.setContentLength(baos.size());
    response.setHeader("Content-disposition", "inline; filename=relatorio.pdf");
    response.getOutputStream().write(baos.toByteArray());
    response.getOutputStream().flush();
    response.getOutputStream().close();

    context.responseComplete();

}