Como chamar um objeto tipo classe em hibernate

Oi pessoas, eu tenho minhas classes Produto e Caixa, onde se tem uma relação de 1-1 em ambas, ou 1 Caixa possui 1 produto especifico . Mas eu quero que retorne, além dos dados de caixa, os do respectivo produto também, porém quando eu retorno do bc. de dados o objeto Caixa, retorna erro do Ponteiro nulo. Isso entendo porque, haja vista que não retornei os dados de caixa também, mas não sei como fundir os respectivos dados do produto com sua caixa. Como eu faço pra inserir os dados de produto dentro do objeto caixa? Ou seja, chamar os dados da classe secundadria para a principal? Está complicado porque se trata de dois objetos, e estou fazendo isso usando método Criteria

public Pilha trazerCriteria(){

//Pilha porque tem de trazer varias caixas, com seus produtos
Pilha p = new Pilha();
try{

SessionFactory se = Ligacao2.conecao();
Session secao = se.openSession();
Transaction trans = secao.beginTransaction();

Criteria cr = secao.createCriteria(Caixa2.class);
cr.setFetchMode("doProduto", FetchMode.JOIN);

List<Caixa2> resultado = cr.list();
    
for(Caixa2 c2 : resultado) {//Item pro caixa dominate
    Criteria cr2 = secao.createCriteria(Produto2.class);
    List<Produto2> prs = cr2.list();

      //Aqui chamar caixa[X] //item do possuido ou calsse pertencida  
for ( Iterator iter = prs.iterator();    iter.hasNext(); )           {
  Produto2 pedido = (Produto2) iter.next();
  System.out.println("e produto " + pedido.toString());  

}
}
// Aqui erro de ponteiro nulo
System.out.println(“CAIXA TEM =>=>=>”+ resultado.toString());

p.pilha = resultado; 
trans.commit();      secao.close();    

   }catch(Exception e ){
    System.err.println("THE ERROE IS ===>>>" + e);
    return null;    }
   
   return p;  

}

@Entity
public class Produto2 implements Serializable{

    private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int codigo;
private String nome;

@OneToOne  ( cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private Caixa2 doProduto;

        /*GETTERS E SETTERS*/
@Override
public String toString() {
    return ", Produto{" + ", nome=" + nome + ", codigo=" + codigo + '}';
}

@Entity
//@Table(name = “Caixa”)
public class Caixa2 implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
private String destino;



@OneToOne(mappedBy = "doProduto", cascade = CascadeType.ALL)
@Embedded
private Produto2 produtoDacaixa;
 

 /*GETTERS E SETTERS*/

@Override
public String toString() {
    return "Caixa2{" + "id=" + id + ", destino=" + destino + produtoDacaixa.toString() + '}';
}