Vc cria uma classe que contenha os campos usados no report, or exemplo.
Supomos que vc tenha a atua estrutura com os models das tabelas, Pessoa (nome, cpf, endereco, telefone) e Pedidos (nome, valor, quantidade, descricao).
Vc cria uma classe com o possivel nome:
PedidosPorPessoaReportModel .java
public class PedidosPorPessoaReportModel {
private String nomePessoa;
private String cpf;
private String endereco;
private String telefone;
private Collection<DetalhePedidoReportModel> detalhePedidoCollection;
// getters and setters
}
e outra com o detalhe dos pedidos
public class DetalhePedidoReportModel {
private String nomeProduto;
private BigDecimal valor;
private Integer quantidade;
private String descricao;
// getters and setters
}
vc monta essa estrutura no seu programa e passa pro report, com isso vc remove a dependência do report com os models das tabelas, além de resolver o seu problema.
Por exemplo.
public ArrayList<PedidosPorPessoaReportModel> montaReportModel(ArrayList<Cliente> clienteList) {
ArrayList<PedidosPorPessoaReportModel> pessoasReportModel = new ArrayList<PedidosPorPessoaReportModel>();
PedidosPorPessoaReportModel pessoaMV;
for (Cliente cliente : clienteList) {
pessoaMV = new PedidosPorPessoaReportModel();
ArrayList<PedidosPorPessoaReportModel> pedidosReportModel = new ArrayList<PedidosPorPessoaReportModel>();
DetalhePedidoReportModel pedidoMV;
pessoaMV.setNomePessoa(cliente.getNome());
// Demais setters
for(Pedido pedido : cliente.getPedidos()) {
pedidoMV = DetalhePedidoReportModel();
pedidoMV.setNomeProduto(pedido.getProduto().getNome());
// Demais setters
pedidosReportModel.add(pedidoMV);
}
pessoaMV.setDetalhePedidoCollection(pedidosReportModel);
pessoasReportModel.add(pessoaMV);
}
return pessoasReportModel;
}
Então vc passa essa coleção pro seu report model, com isso vc não tem que se preocupar com o problema de relacionamentos, já que vc só tem um nível nos models
Seu jrxml ficaria com a segunte estrutura,
Um jrxml que receberia a coleção de clientes, e um subrelatório que receberia a coleção de pedidos, pra cada cliente vc teria sua propria coleção de pedidos e o jrxml faria a iteração normal.
Espero ter ajudado. =]