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.