dÚvida mapeamento de chave primaria estrangeira

[quote=hedlabel]Valeu pela ajuda ai galera!
Mas, agora tem outro problema, eu fiz a herança:

[code]
@Entity
@Table(name=“Advogado”, schema=“SISBIOID”)
@Inheritance(strategy=InheritanceType.JOINED)
public class Advogado extends Pessoa implements Serializable
{

@PrimaryKeyJoinColumn(name="Pessoa")
public Integer getId()
{
    return (this.getId());
}


}[/code]

Ele diz que não há id para essa classe! Oo" Não entendi, o pq de não ter o Id.[/quote]

Consertei já! Tinha esquecido de ajeitar a super-classe! :?

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
}

Entendeu? :slight_smile:

Eu consertei isso tb! Foi mal. :smiley:

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
}

:wink:

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! :slight_smile:

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

Eu to estudando pela documentação. =)
Valeu mesmo galera!