Erro nos relacionamentos do JPA

Boa tarde, estou com dificuldades em relacionamentos com JPA, tenho
as 3 classes a seguir:
//classe pedido
@Entity
public class Pedido {
@Id
private int codigoPed;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = “PEDIDOPRODUTO”,
joinColumns = {@JoinColumn(name =“CODIGOPRO”,referencedColumnName=“CODIGOPRO”)},
inverseJoinColumns = {@JoinColumn(name =“CODIGOPED”,referencedColumnName=“CODIGOPED”)}
)
private List<Produto> produtos;
private int codigoCli;
}

//classe pedidoproduto utilizado para ligar os pedidos com os produtos
@Entity
public class PedidoProduto {
@Id
private int codigo;

   @JoinColumns(@JoinColumn(name = "CODIGOPED",referencedColumnName="CODIGOPED"))
   private Pedido pedido;

   @JoinColumns(@JoinColumn(name = "CODIGOPRO",referencedColumnName="CODIGOPRO"))
   private Produto produto;

   private BigDecimal preco;

}

//classe produto
@Entity
public class Produto {
@Id
private int codigoPro;

   private String descricao;

   private BigDecimal preco;

}

//entao depois eu faço isso pra cadastrar um pedido
EntityTransaction t = em.getTransaction();
t.begin();
try {
Pedido ped1 = new Pedido();
ped1.setCodigoCli(1);
ped1.setCodigoPed(1);
ped1.setProdutos(new ArrayList<Produto>());
ped1.getProdutos().add(em.find(Produto.class, 1));
ped1.getProdutos().add(em.find(Produto.class, 2));
em.persist(ped1);
em.flush();
t.commit();
} catch (Exception e) {
e.printStackTrace();
t.rollback();
}

e me da o seguinte erro:
…INSERT INTO PEDIDO (CODIGOPED, CODIGOCLI) VALUES (?, ?)
bind => [1, 1]
[TopLink Warning]: 2007.07.10 07:12:14.546–UnitOfWork(19551658)–Thread(Thread[main,5,main])–Local Exception Stack:
Exception [TOPLINK-45] (Oracle TopLink Essentials - 9.1 (Build b25)): oracle.toplink.essentials.exceptions.DescriptorException
Exception Description: Missing mapping for field [PEDIDO.CODIGOPRO].
Descriptor: RelationalDescriptor(entity.Pedido --> [DatabaseTable(PEDIDO)])…

cara, pelo q eu entendi vc tem um mapeamento many-to-many, soh q a tabela associativa, tem mais coisa alem das chaves…no caso o campo ‘preco’

acho q a solução eh algo do tipo:

classe Pedido

@Entity 
public class Pedido  implements Serializable&#123; 
    @Id 
    private int codigoPed;

    private Set&lt;PedidoProduto&gt; = new HashSet&#40;&#41;;

    @OneToMany&#40;cascade=ALL, mappedBy=&quot;PedidoProduto&quot;&#41;
    public Set&lt;PedidoProduto&gt; getPedidoProdutos&#40;&#41; &#123; 
        return pedidoProdutos; 
    &#125;
&#125; 

classe Produto

@Entity 
public class Produto  implements Serializable&#123; 
    @Id 
    private int codigoPro; 

    private Set&lt;PedidoProduto&gt; = new HashSet&#40;&#41;;

    @OneToMany&#40;cascade=ALL, mappedBy=&quot;PedidoProduto&quot;&#41;
    public Set&lt;PedidoProduto&gt; getPedidoProdutos&#40;&#41; &#123; 
        return pedidoProdutos; 
    &#125;
&#125; 

classe pedidoproduto

@Entity 
public class PedidoProduto  implements Serializable&#123; 
    @Id 
    private int codigo; 

    private Pedido pedido;

    private Produto produto; 

    @ManyToOne
    @JoinColumn&#40;name=&quot;CODIGOPED&quot;, nullable=false&#41;
    public Pedido getPedido&#40;&#41; &#123; 
        return pedido; 
    &#125;
    @ManyToOne
    @JoinColumn&#40;name=&quot;CODIGOPRO&quot;, nullable=false&#41;
    public Produto getProduto&#40;&#41; &#123; 
        return produto; 
    &#125;

    private BigDecimal preco; 
&#125;

cara, não testei nada disso, mas acho q deu pra sacar a ideia…mas assim, vamos tentar facilitar seu mapeamento…pois esse modelo de Pedido-Produto eh classico…pq vc colocou o Preço na tabela associativa? o Preço não é do Pedido??? se vc deixar a tabela PedidoProduto apenas com as FKs, vc faz um relacionamento ManyToMany, simples…sem precisar mapear a tabela associativa…fica coisa fina…

pra te ajudar a documentação de Annotations pra JPA esta aqui

espero ter ajudado…

flw

preciso ter o preço na tabela PedidoProduto por que cada produto tem seu preço, e se alterar o preço do produto, os pedidos antigos devem se manter com os preços feito quando foi feito o pedido. Quanto a questão do mapeamento, eu estava tentando fazer o mapeamento direto de pedidos com produtos, mas acho que foi viagem minha no caso da minha logica, mas acho que isso da pra fazer. Mas de qualquer forma valeu, vou fazer os testes pra ver se realmente resolvera o meu problema

cara…vc pode fazer o mapeamento direto de Pedido pra Produto (e vice-versa) caso a tabela associativa não contenha nada alem das FKs…

nesse seu caso do preço realmente faz sentido…pq o produto pode ter um preço pra determinado pedido…

faz o teste aih e fala pra gente o q rolou…

flw

Outra coisa, faz diferença colocar as anotaçoes nos metodos ou nos atributos?

maravilha cara, funcionou perfeitamente. Era só “poca pratica” mesmo. Só náo consegui fazer uma coisa ainda, fazer com que o JPA crie minhas tabelas innodb ai inves de MyIsan