Olá, pessoal.
O negócio é o seguinte. No meu banco de dados tenho a tabela ‘PEDIDO’ que se relaciona com a tabela ‘SERVICOS_HAS_PEDIDO’ que relaciona com a tabela ‘SERVICOS’. O que importa aqui é que a tabela ‘SERVICOS_HAS_PEDIDO’ possui uma chave composta por dois campos inteiros: ‘servicos_codServico’ e ‘pedido_codPedido’. Montei minha entidades tranquilamente usando @EmbeddeId como resumidamente mostro abaixo:
ServicosHasPedido
public class ServicosHasPedido implements Serializable {
@EmbeddedId
protected ServicosHasPedidoPK servicosHasPedidoPK;
// etc...
}
ServicosHasPedidoPK
@Embeddable
public class ServicosHasPedidoPK implements Serializable {
@Basic(optional = false)
@Column(name = "SERVICOS_CODSERVICO")
private int servicosCodservico;
@Basic(optional = false)
@Column(name = "PEDIDO_CODPEDIDO")
private int pedidoCodpedido;
}
E está assim modelado e funciona como uma beleza. O meu problema é que foi modelado errado e agora eu preciso adicionar mais um campo em ServicosHasPedidoPK, um código para permitir que um pedido possa ter o mesmo serviço mais de uma vez. Então eu fiz o seguinte:
ServicosHasPedidoPK (atualização)
@Embeddable
public class ServicosHasPedidoPK implements Serializable {
@Basic(optional = false)
@Column(name = "CODSERVICOSHASPEDIDO", nullable=false)
private int codservicoshaspedido;
@Basic(optional = false)
@Column(name = "SERVICOS_CODSERVICO")
private int servicosCodservico;
@Basic(optional = false)
@Column(name = "PEDIDO_CODPEDIDO")
private int pedidoCodpedido;
}
Ao rodar a aplicação novamente verifiquei que ele cria o novo campo só que não adiciona na constraint que forma a primary key no banco de dados, sendo que ao tentar cadastrar um mesmo serviço no pedido ele dá erro de violação de constraint da chave primária.
Gostaria de saber se é possível adicionar este meu novo campo de ServicosHasPedidoPK na chave primária composta criada utilizando os annotations do JPA? Se sim, como fazer isso? Ressaltando que eu não posso deletar a tabela porque ela já conta com dados cadastrados. Uma sinuca de bico. Alguém tem alguma sugestão?
Desde já agradeço.