[Resolvido]Retornado dois objetos em uma lista

Estou desenvolvendo uma aplicação web utilziando jsp e o banco de dados postgresql e gostaria de pegar dados de duas tabelas diferentes e retorna-los em uma lista. Ele retorna os dados dos produtos e parcelas normalmente e coloco o resultado retornado do banco de dados no objeto ,mas não sei como retorna dois objetos Produtos pro = new Produtos(); Parcelas par = new Parcelas(); em uma unica lista. No caso ele só adiciona na lista os dados dos produtos lista.add(pro);, e não o objeto parcelas junto com o objeto produtos

public List mostrarProdutosCompra(String pesquisa) {
try {
    con = Conecta.conexao();
} catch (ClassNotFoundException ex) {
    Logger.getLogger(Conecta.class.getName()).log(Level.SEVERE, null, ex);
}

try {

    String sql = "Select pro.prod_cod ,pro.prod_desc, pro.prod_nome,pro.prod_valor,par.prod_parc1,par.prod_parc2,par.prod_parc3,par.prod_parc4,par.prod_parc5,par.prod_parc6,par.prod_parc7,par.prod_parc8,par.prod_parc9,par.prod_parc10 from tb_produtos as pro  inner join tb_parcelas as par  on pro.prod_desc=par.prod_desc where pro.prod_desc like '%" + pesquisa + "%'";
    Statement statement = con.createStatement();

    ResultSet rs = statement.executeQuery(sql);
    List lista = new ArrayList();

    while (rs.next()) {
        Produtos pro = new Produtos();
        Parcelas par = new Parcelas();

      pro.setCodigo((rs.getInt("prod_cod")));
        par.setProd_parc1((rs.getDouble("prod_parc1")));
        par.setProd_parc2((rs.getDouble("prod_parc2")));
        par.setProd_parc3((rs.getDouble("prod_parc3")));
        par.setProd_parc4((rs.getDouble("prod_parc4")));
        par.setProd_parc5((rs.getDouble("prod_parc5")));
        par.setProd_parc6((rs.getDouble("prod_parc6")));
        par.setProd_parc7((rs.getDouble("prod_parc7")));
        par.setProd_parc8((rs.getDouble("prod_parc8")));
        par.setProd_parc9((rs.getDouble("prod_parc9")));
        par.setProd_parc10((rs.getDouble("prod_parc10")));

        pro.setDescricao((rs.getString("prod_desc")));

        pro.setValor(rs.getDouble("prod_valor"));


         lista.add(pro);

    }

    return lista;
} catch (Exception e) {
    JOptionPane.showConfirmDialog(null, e);
    return null;
}

}

Classes

public final class Produtos {

private int codigo;
private String nome;
 private String descricao;
 private double valor;
 private String marca;
 private String tamanho;

    private String tecido;


  Produtos(){

   }

  public Produtos(int id, String nome, String descricao, double valor, String marca, String tamanho, String tecido) {
  this.codigo = codigo;
   this.nome = nome;
  this.descricao = descricao;
  this.valor = valor;
  this.marca = marca;
 this.tamanho = tamanho;

  this.tecido = tecido;

 }

 public int getCodigo() {
return codigo;
 }

  public void setCodigo(int codigo) {
this.codigo = codigo;
   }

    public String getNome() {
return nome;
   }

   public void setNome(String nome) {
this.nome = nome;
  }

   public String getDescricao() {
return descricao;
   }

 public void setDescricao(String descricao) {
this.descricao = descricao;
  }

 public double getValor() {
return valor;
  }

 public void setValor(double valor) {
this.valor = valor;
 }

 public String getMarca() {
return marca;
 }

 public void setMarca(String marca) {
this.marca = marca;
 }

  public String getTamanho() {
return tamanho;
   }

   public void setTamanho(String tamanho) {
this.tamanho = tamanho;
  }

  public String getTecido() {
return tecido;
  }

  public void setTecido(String tecido) {
  this.tecido = tecido;
  }

Classe Parcelas

public class Parcelas {

private String descricao;
private double prod_parc1;
private double prod_parc2;
private double prod_parc3;
private double prod_parc4;
private double prod_parc5;
private double prod_parc6;
private double prod_parc7;
private double prod_parc8;
private double prod_parc9;
private double prod_parc10;

  Parcelas(){

}

public Parcelas(String descricao, double prod_parc1,double prod_parc2, double prod_parc3, double prod_parc4, double prod_parc5,double prod_parc6,double prod_parc7,double prod_parc8,double prod_parc9,double prod_parc10) {
this.descricao = descricao;
 this.prod_parc1 = prod_parc1;
 this.prod_parc2 = prod_parc2;
 this.prod_parc3= prod_parc3;
  this.prod_parc4 = prod_parc4;
  this.prod_parc5 = prod_parc5;
 this.prod_parc6 = prod_parc6;
 this.prod_parc7 = prod_parc7;
 this.prod_parc8 = prod_parc8;
 this.prod_parc9 = prod_parc9;
 this.prod_parc10 = prod_parc10;
 

}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public double getProd_parc1() {
    return prod_parc1;
}

public void setProd_parc1(double prod_parc1) {
    this.prod_parc1 = prod_parc1;
}

public double getProd_parc2() {
    return prod_parc2;
}

public void setProd_parc2(double prod_parc2) {
    this.prod_parc2 = prod_parc2;
}

public double getProd_parc3() {
    return prod_parc3;
}

public void setProd_parc3(double prod_parc3) {
    this.prod_parc3 = prod_parc3;
}

public double getProd_parc4() {
    return prod_parc4;
}

public void setProd_parc4(double prod_parc4) {
    this.prod_parc4 = prod_parc4;
}

public double getProd_parc5() {
    return prod_parc5;
}

public void setProd_parc5(double prod_parc5) {
    this.prod_parc5 = prod_parc5;
}

public double getProd_parc6() {
    return prod_parc6;
}

public void setProd_parc6(double prod_parc6) {
    this.prod_parc6 = prod_parc6;
}

public double getProd_parc7() {
    return prod_parc7;
}

public void setProd_parc7(double prod_parc7) {
    this.prod_parc7 = prod_parc7;
}

public double getProd_parc8() {
    return prod_parc8;
}

public void setProd_parc8(double prod_parc8) {
    this.prod_parc8 = prod_parc8;
}

public double getProd_parc9() {
    return prod_parc9;
}

public void setProd_parc9(double prod_parc9) {
    this.prod_parc9 = prod_parc9;
}

public double getProd_parc10() {
    return prod_parc10;
}

public void setProd_parc10(double prod_parc10) {
    this.prod_parc10 = prod_parc10;
}

Crie uma classe (ProdutosCompra como no método) que contenha os dois objetos, exemplo:

class ProdutosCompra {
  Produto produto;
  Parcelas parcelas;
}

depois é só retornar numa lista

eu criei uma classe com os objetos

Classe
ProdutosParcelas

public class ProdutosParcelas {

private Produtos produto;
private Parcelas parcelas;

public Produtos getProduto() {
    return produto;
}

public void setProduto(Produtos produto) {
    this.produto = produto;
}

public Parcelas getParcelas() {
    return parcelas;
}

public void setParcelas(Parcelas parcelas) {
    this.parcelas = parcelas;
}

}

Mas ao executar o código da classe DAO ele da o erro de NullPointerException.

 public List mostrarProdutosCompra(String pesquisa) {
    try {
        con = Conecta.conexao();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Conecta.class.getName()).log(Level.SEVERE, null, ex);
    }

    try {

        String sql = "Select pro.prod_cod ,pro.prod_desc, pro.prod_nome,pro.prod_valor,par.prod_parc1,par.prod_parc2,par.prod_parc3,par.prod_parc4,par.prod_parc5,par.prod_parc6,par.prod_parc7,par.prod_parc8,par.prod_parc9,par.prod_parc10 from tb_produtos as pro  inner join tb_parcelas as par  on pro.prod_desc=par.prod_desc where pro.prod_desc like '%" + pesquisa + "%'";
        Statement statement = con.createStatement();

        ResultSet rs = statement.executeQuery(sql);
        List lista = new ArrayList();

        while (rs.next()) {
           
            ProdutosParcelas prod= new ProdutosParcelas();
            
           
            prod.getProduto().setCodigo((rs.getInt("prod_cod")));//Erro de NullPointerException
            prod.getParcelas().setProd_parc1((rs.getDouble("prod_parc1")));
            prod.getParcelas().setProd_parc2((rs.getDouble("prod_parc2")));
           prod.getParcelas().setProd_parc3((rs.getDouble("prod_parc3")));
           prod.getParcelas().setProd_parc4((rs.getDouble("prod_parc4")));
           prod.getParcelas().setProd_parc5((rs.getDouble("prod_parc5")));
           prod.getParcelas().setProd_parc6((rs.getDouble("prod_parc6")));
          prod.getParcelas().setProd_parc7((rs.getDouble("prod_parc7")));
           prod.getParcelas().setProd_parc8((rs.getDouble("prod_parc8")));
          prod.getParcelas().setProd_parc9((rs.getDouble("prod_parc9")));
        prod.getParcelas().setProd_parc10((rs.getDouble("prod_parc10")));
       prod.getProduto().setDescricao((rs.getString("prod_desc")));
            prod.getProduto().setValor((rs.getDouble("prod_valor")));


          
             lista.add(prod);

        }

        return lista;
    } catch (Exception e) {
        JOptionPane.showConfirmDialog(null, e);
        return null;
    }

}

  }

Faltou instanciar o produto e as parcelas na nova classe:

ProdutosParcelas prod= new ProdutosParcelas();
prod.setProduto(new Produto());
prod.setParcelas(new Parcelas());

era isso mesmo obrigado , mas diego12 por gentileza poderia me explicar porque teve que instanciar objeto vazio e setar ele dentro do prod.setProduto e prod.setParcelas não entendi muito bem

Desculpa pela demora, meu computador quebrou.

public class ProdutosParcelas {

private Produtos produto;
private Parcelas parcelas;

é equivalente a

public class ProdutosParcelas {

private Produtos produto = null;
private Parcelas parcelas = null;

então quando instanciado ProdutosParcelas, os atributos são nulos e quando chamado o get, o valor nulo é retornado . Para resolver esse problema, pode atribuir uma instancia através do setters ou instanciar na própria classe:

prod.setProduto(new Produto());
prod.setParcelas(new Parcelas());

ou

public class ProdutosParcelas {

private Produtos produto = new Produtos();
private Parcelas parcelas = new Parcelas();