Pessoal;
Tenho um problema aqui que aparentemente parece ser simples, porém, estou tentando resolvê-lo a alguns dias sem sucesso.
É o seguinte:
Tenho duas tabelas na banco, sendo cf_loja e cd_bomba
estrutura das tabelas:
cf_loja
id_loja -------- serial pk
num_loja------ varchar(2)
nome_loja-----varchar(45)
cd_bomba
id_bomba------ int pk
id_loja----------int pk, fk
num_serie------varchar(20)
Como podem ver, a chave primária da tabela bomba é composta pelo id da bomba e pelo id da loja, sendo que o id da loja é também chave estrangeira da tabela cf_loja.
Preciso que seja chave composta porque a seguinte situação abaixo poderá acontecer:
id_bomba id_loja
1-------------1
2-------------1
3-------------1
1-------------2
2-------------2
Essas tabelas foram mapeadas da seguinte maneira usando hibernate anotações:
VO da tabela cd_bomba:
@Entity
@Table(name = "cd_bomba")
public class CdBombaVO extends ValueObjectImpl implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected CdBombaVOPK cdBombaVOPK;
@Column(name = "numserie_bomba")
private String numserieBomba;
@Column(name = "fabricante_bomba")
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_loja", insertable = false, updatable = false)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private CfLojaVO lojaVO;
get/set
VO da tabela cf_loja:
@Entity
@Table(name = "cf_loja")
@SequenceGenerator(name = "cf_loja_id_loja_seq", sequenceName = "cf_loja_id_loja_seq")
public class CfLojaVO extends ValueObjectImpl implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "cf_loja_id_loja_seq")
@Basic(optional = false)
@Column(name = "ID_LOJA", nullable = false)
private Integer idLoja;
@Column(name = "NUM_LOJA", length = 2)
private String numLoja;
@Column(name = "NOME_LOJA", length = 45)
private String nomeLoja;
get/set
E foi criada automaticamente pelo Netbeans um VO para conter os ids da chave composta:
VO CdBombaVOPK:
@Embeddable
public class CdBombaVOPK extends ValueObjectImpl implements Serializable {
@Basic(optional = false)
@Column(name = "id_bomba")
private int idBomba;
@Basic(optional = false)
@Column(name = "id_loja")
private int idLoja;
get/set...
Bom, tentei muitas variações dessas anotações aí mas não tive sucesso em nenhuma tentativa.
O problema que ta dando agora é que na hora de inserir algum registro na tabela bomba aparece a seguinte mensagem:
Pergunto a vocês, esse mapeamento que fiz aí está correto? Essa é a melhor maneira de fazer mesmo?
Como resolver esse problema?
Pesquisando, vi muita gente aconselhando não usar chave composta, mas preciso que o id_bomba e o id_loja possam repetir, so não pode repedir os dois juntos no mesmo registro. Teria uma maneira de fazer funcionar dessa forma sem usar chave composta?
Outra coisa, na tabela cf_loja, não faço nenhum mapeamento referente a esse cadastro de bomba, isso está certo?
Para complementar, estou usando Netbeans 7 e banco Postgres.
Desde já, agradeço a atenção.