Item Pedido - JPA Hibernate - @OneToMany - problema ao salvar itens

Pessoal, boa noite.
Fiquei o dia todo quebrando a cabeça em um projeto que estou desenvolvendo.

Tenho uma classe de Pedido e outra de itens.
As informações do pedido consigo salvar, alterar, excluir tranquilo. Mas meus itens eu nao sei como resolver, acontece o seguinte.

Na tela de pedido consigo digitar os itens normalmente, porém ao gravar, ele salva o pedido normal, mas os itens não.
Ex: Se eu digitar o pedido 1 - item 3 e gravar, ele grava.
Se eu digitar o pedido 2 - item 3, ele muda o registro na tabela ‘itemPedido’ substituindo o pedido 1 pelo 2.

Alguém pode me dar uma luz?

Classe pedido (partes importantes)

@IdentificaCampoPesquisa(descricaoCampo = "Código", campoConsulta = "ped_codigo")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "pedido_seq")
private Long ped_codigo;
....
@OneToMany(mappedBy = "pedido",cascade = CascadeType.ALL,orphanRemoval = true,fetch = FetchType.EAGER)
private List<ItemPedido> itens = new ArrayList<>();

  // getters and setters.

Classe ItemPedido (partes importantes)

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "item_pedido_seq")
private Long item_ped_codigo;

@Column(nullable = false, length = 20)
private String item_ped_codigo_proprio;

@Column(scale = 4, precision = 15, nullable = false)
private Integer item_ped_qtde;

@Column(nullable = false, length = 80)
private String item_ped_descricao;

@Column(scale = 2, precision = 10)
private BigDecimal item_ped_val_unit = BigDecimal.ZERO;

@ManyToOne
@JoinColumn(name = "produto")
@ForeignKey(name = "produto_item_pedido_fk")
private Produto produto;

@ManyToOne
@JoinColumn(name = "pedido_ped_codigo", referencedColumnName = "ped_codigo")
@ForeignKey(name = "pedido_item_pedido_fk")
private Pedido pedido;

Bean (método salvar)

   @Transactional
public void save() throws Exception {
		if (meuObjeto.getItens().isEmpty()) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "O pedido precisa de pelo menos um item.", ""));
			return;
		}

		if (meuObjeto.isValorTotalNegativo()) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "O valor total do pedido não pode ser nagativo", ""));
			return;
		}
		
		for (int i = 0; i < meuObjeto.getItens().size(); i++) {
			System.out.println("get: "+meuObjeto.getItens().get(i).getProduto().getPrd_descricao());
			}*/
		}
		
		this.meuObjeto.recalcularValorTotal();
		this.meuObjeto.removerItemVazio();
		meuObjeto= pedidoController.merge(meuObjeto);
		sucesso();
		novo();
	}
}

Acho estranho pq essa saída: “System.out.println…” mostra os itens certinho antes de gravar.
Estou usando escopo de sessão.

Pedido p = new Pedido();
p.setNumero(123);
p.setData(11/11/1111) etc…

Item item1 = new Item();
item.setQtde(3)

Item item2 = new Item();
item.setQtde(2)

Item item3 = new Item();
item.setQtde(2)

List list = new arrayList();
list.add(item1);
list.add(item2);
list.add(item3);

p.setItemPedido(list);

session.save(‘p’)
ou
session.persist(‘p’)

-----------------------------------//------------------------------
tenta usar o método ai de cima caso não funcione tenta assim.

Pedido p = new Pedido();
p.setNumero(123);
p.setData(11/11/1111) etc…

Item item1 = new Item();
item.setQtde(3)
item.setProduto(‘p’);

p.getItemPedido.add(item1)

session.persist(‘p’)