Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mapeando coluna de chave estrangeira

Boa noite!

No exemplo apresentado nessa aula, o professor cria um atributo categoria dentro da classe produto. Notei que quando vamos inserir um registro com uma coluna chave estrangeira, a JPA automaticamente insere como _id.

Exemplo:

public class Produto {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nome;
    private String descricao;
    private double preco;
    private LocalDate dataCadastro = LocalDate.now();
    @ManyToOne
    private Categoria categoria;
}

Nota que o atributo chave estrangeira se chama categoria. No entanto, quando adicionamos no banco de dados a JPA nos retorna a seguinte mensagem:

Hibernate: insert into produtos (categoria_id, dataCadastro, descricao, nome, preco) values (?, ?, ?, ?, ?)

O atributo categoria automaticamente foi mapeado para categoria_id.

Minha pergunta é: caso no banco de dados minha coluna chave estrangeira não assuma esse padrão de nomenclatura (nome_id), como posso configurar para que a JPA saiba em que coluna inserir meu atributo?

Tentei usar o @Column(name = "qualquercoisa"), mas o compilador me retornou a seguinte exceção:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at br.com.kaezyro.alura.loja.main.CadastroDeProduto.main(CadastroDeProduto.java:17)
Caused by: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property: br.com.kaezyro.alura.loja.model.Produto.categoria
    at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1778)

Obrigado pela ajuda desde já!

2 respostas
solução!

Oi Fellipe,

Como é uma coluna de chave estrangeira, para personalizar voce deve utilizar a anotacao @JoinColumn:

@ManyToOne
@JoinColumn(name = "id_categoria")
private Categoria categoria

Bons estudos!

Valeu, Rodrigo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software