@GeneratedValue

2 respostas
K

Tenho uma tabela onde minha chave primária são 2 campos, entao quando vai gerar o pojo ele gera um para os campos normais e outro para as primary key, no pojo das primary key meu codigo está assim

1 - @Embeddable

2 - public class Chequec2PK implements Serializable {

3 -   @Id

4 -   @GeneratedValue(strategy = GenerationType.TABLE, generator = CHEQUEC2_ID)

5 -   @TableGenerator(name = CHEQUEC2_ID, table = geradores, pkColumnName = ID_GER, 4 - 4 - valueColumnName = VL_GER, pkColumnValue = GCHEQUEC2, allocationSize=1)

6 -  @Column(name = COD_LANCHQ2)

7 -   private Integer codLanchq2;

8 -  @Column(name = COD_LANCHQ)

9 -   private Integer codLanchq;

10 - public Chequec2PK() {
11 - }

Na linha 7 no caso ele me da a mensagem “generatedvalue annotation should only be used for id field”, e nao gera o codigo automaticamente, estou usando como banco o mysql, alguem poderia me ajudar a saber o pq ele passa essa mensagem, pq nao gera o codigo e como resolver o problema?

2 Respostas

rafaelk

Kelson, partindo do princípio que esta classe foi criada devido a existência de um relacionamento muitos para muitos, imagino o seguinte:

  • Se a classe associativa não possuir outros atributos, não é necessário criá-la, utiliza-se @ManyToMany nas duas classes de origem;
    Partindo do princípio que ela não é uma classe associativa:
  • Ela é o id da outra classe, e é originada de uma composição de duas chaves estrangeiras (fk) pré existentes, logo você não anota @Id nesta classe e muito menos @GeneratedValue, pois estas chaves precisam ser geradas em sua(s) entidade(s) de origem.
    Se for um cenário diferente destes dois, poste seu diagrama de classes e ou o código completo.
    Espero ter contribuído.
K

Valeu rafaelk, no meu caso realmente se encaixa aí na segunda opção aí, consegui resolver aqui com a dica, vlw

Criado 13 de janeiro de 2009
Ultima resposta 15 de jan. de 2009
Respostas 2
Participantes 2