Erro ao salvar objeto vindo de xml

<lista>
  <produto codigo="1">
    <codigoProduto>1004</codigoProduto>
    <descricao>PAVESINO 800X15</descricao>
    <valor>2.30</valor>
    <historicos>
      <historico codigo="1">
        <mesesHistoricos>2009-12-21 15:43:59.512 UTC</mesesHistoricos>
        <quantidade>6735</quantidade>
      </historico>
  <historico codigo="2">
    <mesesHistoricos>2010-01-21 15:43:59.514 UTC</mesesHistoricos>
    <quantidade>5940</quantidade>
  </historico>
  <historico codigo="3">
    <mesesHistoricos>2010-02-21 16:43:59.514 UTC</mesesHistoricos>
    <quantidade>4824</quantidade>
  </historico>
  <historico codigo="4">
    <mesesHistoricos>2010-03-21 16:43:59.514 UTC</mesesHistoricos>
    <quantidade>7869</quantidade>
  </historico>
  <historico codigo="5">
    <mesesHistoricos>2010-03-21 16:43:59.514 UTC</mesesHistoricos>
    <quantidade>8152</quantidade>
  </historico>
</historicos>

ao ler e salvar no banco recebo o erro que o id_produto estar null. para não ocorrer isso coloquei o cascade. estou fazendo de forma manual

EStou tentando salvar no banco com o seguinte codigo:

 public static void main(String[] args)  throws FileNotFoundException {
	
	EntityManagerFactory factory = 
    Persistence.createEntityManagerFactory("PrevisaoVendasPU");
	EntityManager manager = factory.createEntityManager();
	
	EntityTransaction trx = manager.getTransaction();
	trx.begin();
	// =================== LER ================================
	XStream ler = new XStream(new DomDriver());
	ler.alias("lista", List.class);
	ler.alias("historico", Historico.class);
	ler.aliasAttribute(Historico.class, "codigo", "codigo");
	ler.alias("produto", Produto.class);
	ler.aliasAttribute(Produto.class, "codigo", "codigo");
	List<Produto> listaProduto = (List<Produto>) ler.fromXML(new FileInputStream("./produto2.xml"));
	
	

	for (Produto p : listaProduto) {
		System.out.println(p.getCodigo());
		System.out.println(p.getCodigoProduto()== null ? "Erro": p.getCodigoProduto());
		System.out.println(p.getDescricao());

		for (Historico h : p.getHistoricos()) {
			System.out.println(h.getCodigo());
			System.out.println(h.getMesesHistoricos());
			System.out.println(h.getQuantidade());
			
			p.getHistoricos().add(h);
			manager.persist(p);
			
			
		}

		
		
		
	}
	
	trx.commit();
}