1
resposta

Dúvida sobre Id no banco de dados e @Generated

Olá, estava fazendo uma app com MySql, e eu fiquei na dúvida, quando eu já tenho as tabelas criadas no banco, ele precisa ter um id autoincrement, porque a notação @Generated, cria números automáticos, como funciona isso? Outra coisa se eu uso nomes compostos na coluna da tabela, ele também gera conflito, por. exemplo, CienteId, o JPA gera cliente_id como coluna e na hora de aplicar no postman ou ele cria uma coluna com esse nome ou ele não grava os dados na coluna, porque isso acontece?

1 resposta

Oi Gisele,

A JPA segue um conceito chamado COC(Convetion Over Configuration), no qual assume determinado padrão quando não configuramos algo.

No caso do mapeamento de entidades, por padrão a JPA vai assumir que o nome de uma coluna na tabela será igual ao nome do atributo na classe. Essa é a convenção e não precisamos configurar nada se quisermos a seguir, evitando com isso códigos desnecessários. Mas quando não vamos seguir alguma convenção, aí sim precisamos configurar.

No caso de um atriibuto de relacionamento, a convenção é que o nome da coluna na tabela seja no formato camelCase e por isso a coluna para ela será clienteId. Para mudar esse padrão você deve utilizar a anotação @JoinColumn(name = "cliente_id") passando o nome da coluna diferente da convenção.

No caso do id, a JPA exige que algum atributo tenha a anotação @Id indicando ser o atributo que representa a chave primária na tabela. E caso não seja a aplicação que vai gerenciar a geração das chaves primárias, então devemos utilizar a anotação @GeneratedValue para avisar a JPA que o próprio banco de dados se encarregar de gerar os ids. Nesse caso a JPA não interfere em nada, pois é o banco que vai cuidar de fazer o auto increment, ou utilizar uma sequence.