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

A @Entity é uma classe filha e o @Id não está nela e sim na classe pai: como fazer?

Pessoal, tenho uma dúvida. Estou seguindo este curso e fazendo um projeto semelhante onde tenho uma classe usuario que herda de pessoa. Mas a minha classe usuário será a minha entity, porém a minha key não está como atributo da usuário e sim de pessoa. Eu poderia colocar o @Id na classe pessoa normalmente? Abaixo tem o início do meu códio da classe usuário e da classe pessoa.

@Entity //A classe filme é uma entidade, representando uma tabela no banco, que é a Usuários
@Table(name="usuarios")
public class Usuario extends Pessoa{
    private String cargo;
    private LocalDate dataCadastro;
public abstract class Pessoa {
    private String nome;
    @Id
    private String cpf;
    private Date datanasc;
    private Character sexo;
2 respostas
solução!

Olá Bianca, tudo bem?

Sim, é possível colocar a anotação @Id na classe Pessoa e utilizar essa chave na classe filha Usuario. Na verdade, essa é uma das formas de se fazer mapeamento de herança no JPA.

Para utilizar a chave da classe pai na classe filha, é necessário utilizar a anotação @PrimaryKeyJoinColumn na classe filha, informando qual é o nome da coluna que será utilizada como chave estrangeira para a classe pai.

Segue um exemplo de como ficaria a sua classe Usuario com a anotação @PrimaryKeyJoinColumn:

@Entity
@Table(name="usuarios")
@PrimaryKeyJoinColumn(name="cpf")
public class Usuario extends Pessoa{
    private String cargo;
    private LocalDate dataCadastro;

Obs: No curso de JPA explica como fazer mapeamento de herança.

Espero ter ajudado e bons estudos!

Olá, Rodrigo!! Agradeço muito a ajuda. Serviu bastante. Permaneci com o @Id na classe pai e adicionei o código de @@PrimaryKeyJoinColumn(name = "cpf"). Mas ainda não tinha dado certo e tentei adicionar a anotação @MappedSuperclass acima da declaração da classe pai e funcionou!! Obrigada!