JPA - Rel. 1 para muitos + Sequence + Chave composta

1 resposta
ynaue

Oi pessoal!!!!

Estou com problemas e duvidas na hora de inseir um dado quando tenho um relacionamento de 1 para muitos, onde campo para esse relacionamento recebe o valor de uma Sequence em uma tabela e na outra faz parte de uma chave composta.

Eu tenho um relacionamento entre duas tabelas de Um- para muitos.

1 PEDIDOS -> N ITENSPEDIDO

Basicamente minhas tabelas são assim:

PEDIDO
* pedidoID (PK) - Sequence: pedido_seq
nome

ITENSPEDIDO
*pedidoID(PK)
* itempedidoID(PK)
Descricao

Os Mapeamentos ficaram assim:

Pedidos->
@Entity
@Table(name = "pedidos")
public class Pedidos implements Serializable {
    
    @Id
    @SequenceGenerator(name="pedido_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="pedido_seq") 
    @Column(name = "pedido_id", nullable = false)
    private int pedidoID;
    ...
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "pedidos")
    private List<ItensPedido> itensPedidoCollection;
ItensPedido ->
@Entity
@Table(name = "itens_pedido")
public class ItensPedido implements Serializable {

    @EmbeddedId
    protected ItensPedidoPK itensPedidoPK;
    ...
    @JoinColumn(name = "pedido_id", referencedColumnName = "pedido_id", insertable = false, updatable = false)
    @ManyToOne
    private Pedidos pedidos;
PK (resolução da Chave composta) ->
@Embeddable
public class ItensPedidoPK implements Serializable {

    @Id
    @Column(name = "pedido_id", nullable = false)
    private int pedidoID;
   
    @Id
    @Column(name = "item_pedido", nullable = false)
    private int itemPedidoID;

Como PEDIDOS tem uma lista de ITENSPEDIDO, se eu der um Persiste(objetopedido) e esse Objeto estiver com a lista de ItensPedido preenchida, os dados não deveria ser inseridos nas 2 tabelas?????

Só que não esta dando certo!!!!!

Diz que o campo pedidoID da Tabela ItensPedido esta com o valor = 0.
Mas como eu vou setar isso se eu não sei qual valor vai ser dado ao pedidoID ja que ele vem de uma sequence e enquanto estou preenchendo os objetos nada foi inserido ainda?????

O JPA ja não deveria entender isso sozinho, ja que eu disse que o relacionamento é feito por esse campo???? Ou entende e eu é que fiz algo errado ou estou esquecendo de alguma configuração ou declaração????

HELP!!!

Obrigada!!!!

1 Resposta

ynaue

Consegui resolver!!! :lol:

Não pode usar @EmbeddedId

Tem que usar @IdClass

Nesse link explica direitinho:
http://forums.java.net/jive/thread.jspa?forumID=56&threadID=18610&messageID=156535

Criado 25 de janeiro de 2007
Ultima resposta 25 de jan. de 2007
Respostas 1
Participantes 1