| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/07/2007 19:16:37
|
marciopPJ
Entusiasta Java
![[Avatar]](/images/avatar/0)
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)])...
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2007 10:41:31
|
pedrobuskoPJ
Virtual Machine Man
![[Avatar]](/images/avatar/0)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2007 12:06:46
|
marciopPJ
Entusiasta Java
![[Avatar]](/images/avatar/0)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2007 12:16:12
|
pedrobuskoPJ
Virtual Machine Man
![[Avatar]](/images/avatar/0)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2007 12:35:18
|
marciopPJ
Entusiasta Java
![[Avatar]](/images/avatar/0)
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/07/2007 13:15:53
|
marciopPJ
Entusiasta Java
![[Avatar]](/images/avatar/0)
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
|
|
|
 |
|
|