Erro nos relacionamentos do JPA  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
marciopPJ
Entusiasta Java
[Avatar]

Membro desde: 12/09/2006 00:00:00
Mensagens: 16
Offline

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(1955165--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)])...
[WWW] [ICQ]
pedrobuskoPJ
Virtual Machine Man
[Avatar]

Membro desde: 14/11/2006 00:00:00
Mensagens: 677
Offline

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


classe Produto

classe pedidoproduto


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
[WWW] [ICQ]
marciopPJ
Entusiasta Java
[Avatar]

Membro desde: 12/09/2006 00:00:00
Mensagens: 16
Offline

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
[WWW] [ICQ]
pedrobuskoPJ
Virtual Machine Man
[Avatar]

Membro desde: 14/11/2006 00:00:00
Mensagens: 677
Offline

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
[WWW] [ICQ]
marciopPJ
Entusiasta Java
[Avatar]

Membro desde: 12/09/2006 00:00:00
Mensagens: 16
Offline

Outra coisa, faz diferença colocar as anotaçoes nos metodos ou nos atributos?
[WWW] [ICQ]
marciopPJ
Entusiasta Java
[Avatar]

Membro desde: 12/09/2006 00:00:00
Mensagens: 16
Offline

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
[WWW] [ICQ]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team