Auto-incremento Hibernate com PrimaryKey Composta

5 respostas
L

Como faço para colocar auto-incremento numa chave composta do Hibernate?

O auto-incremento seria no primeiro atributo!

@Embeddable  
public class TipoExtintorCapacidadePK implements Serializable {  
  
    @Column(name = "idTipoExtintor")  
    private Integer idTipoExtintor;  
  
    @Column(name = "codigo")  
    private String codigo;  
}

Testei a notação @GenerateValue e não funciona, só funciona com @Id e a mesma não é válida para @Embeddable.

Alguém já implementou, ou possui um técnica de escape?

5 Respostas

L

Impossível, ninguém nunca implementou?

leonardocfmg:
Como faço para colocar auto-incremento numa chave composta do Hibernate?

O auto-incremento seria no primeiro atributo!

@Embeddable  
public class TipoExtintorCapacidadePK implements Serializable {  
  
    @Column(name = "idTipoExtintor")  
    private Integer idTipoExtintor;  
  
    @Column(name = "codigo")  
    private String codigo;  
}

Testei a notação @GenerateValue e não funciona, só funciona com @Id e a mesma não é válida para @Embeddable.

Alguém já implementou, ou possui um técnica de escape?

g4j

Não faz sentido você ter uma chave composta da maneira que você está tentando fazer. O conceito de chave primária é identificar o registro como sendo único na tabela, e um identity por si só já faz o trabalho.

Tem algum motivo especial pra querer fazer dessa forma?

L

O campo idTipoExtintor precisa ser do tipo primary key e auto-increment, até aí normal.

Só que o campo código também precisa ser do tipo primary key, pois não é gerado pelo banco como índice, por ser String é gerado pelo usuário, não podendo existir mais de um código igual.

Marky.Vasconcelos

mas se o id já é primario, unico e gerado por que voce tem que ter essa String como primaria também?

g4j

leonardocfmg:
O campo idTipoExtintor precisa ser do tipo primary key e auto-increment, até aí normal.

Só que o campo código também precisa ser do tipo primary key, pois não é gerado pelo banco como índice, por ser String é gerado pelo usuário, não podendo existir mais de um código igual.

Então crie uma constraint UNIQUE (unique index) para essa coluna. Aí se tentar inserir dados duplicados o banco de dados não vai deixar.

Criado 6 de março de 2009
Ultima resposta 9 de mar. de 2009
Respostas 5
Participantes 3