Você tem que colocar a anotação @PrimaryKeyJoinColumn antes da assinatura da classe e não no método get da propriedade id.
Ou seja, na superclasse ficaria assim:
@Entity
@Table(name="pessoa")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Pessoa implements Serializable{
@Id
@Column
private Integer id;
//outras implementações
}
E na subclasse:
@Entity
@Table(name = "advogado")
@PrimaryKeyJoinColumn(name="idpessoa") //onde "idpessoa" é o nome do campo na tabela "advogado" para fazer referência ao id de uma pessoa
public class Advogado extends Pessoa implements Serializable {
//outras implementações
}
Cara, agora me vieram com uma novidade pra mim, uma tabela com duas chaves primárias!! :shock:
Sendo que uma chave primária é “normal”, a saber “id”(o bom e velho id de sempre), e a outra é estrangeira, a saber “rg_preso”(essa chave estrangeira vem da classe mãe “Pessoa” essa que a gente já tava falando). Como eu mapeio?
Pra criar chaves primárias compostas você tem que criar uma classe com a anotação @Embeddable, que vai representar sua chave composta. Exemplo:
@Embeddable
public class IdDeFulano implements Serializable {
@Column
private Integer id;
@Column
private Integer sequencia;
//gets e sets
}
Isso significa que id e sequencia serão a chave primária composta de alguma tabela no banco, referente a alguma classe na sua aplicação.
Na classe que representa a tabela com essa chave composta vai ficar:
@Entity
@Table(name = "fulano")
public class Fulano implements Serializable {
@EmbeddedId
private IdDeFulano id;
//outras implementações
}
Só uma dica: o fórum é pra ajudar a tentar resolver problemas. Pra saber como fazer dá uma procurada por tutorial de Hibernate que você vai encontrar bastante coisa, beleza?
Precisando de alguma ajuda a mais, pode contar!
E não esqueça, além dos tutoriais e a galera daqui, consulte a documentação do Hibernate, tem muitos exemplos, de tudo que é tipo… inclusive esse de chave pk composta… https://www.hibernate.org/5.html