Pessoal, muito obrigado pelas dicas. Agora vou complicar um pouquinho, heheh.
Pelo que percebi, seria adequado utilizar herança mesmo neste caso. Estou tendo algumas dificuldades para fazer o mapeamento com hibernate annotations.
Olhando a documentação em
http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/
acredito que o tipo “Joined subclasses” seria mais adequado, porém minha tabela funcionários possui um ID “codigoFuncionario” que é auto-increment e um campo “codigoPessoa” que é a foreing key para a tabela pessoas.
Usando este tipo de mapeamento, pelo que vi, ele não aceita a declaração do ID auto-increment na classe Funcionario.
Seguem as classes (apenas com os campos relevantes):
@Entity
@Table(name="int_pessoas")
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa {
private Integer codigoPessoa;
private String nomePessoa;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer getCodigoPessoa() {
return codigoPessoa;
}
public void setCodigoPessoa(Integer codigoPessoa) {
this.codigoPessoa = codigoPessoa;
}
public String getNomePessoa() {
return nomePessoa;
}
public void setNomePessoa(String nomePessoa) {
this.nomePessoa = nomePessoa;
}
}
@Entity
@Table(name="int_funcionarios")
@PrimaryKeyJoinColumn(name="codigoPessoa")
public class Funcionario extends Pessoa{
private Integer codigoFuncionario;
private String matricula;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer getCodigoFuncionario() {
return codigoFuncionario;
}
public void setCodigoFuncionario(Integer codigoFuncionario) {
this.codigoFuncionario = codigoFuncionario;
}
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
}
Pelo que entendi, este mapeamento é para quando você utiliza o mesmo campo “primary key” da tabela filha como sendo também a “foreing key” para a tabela pai… mas como faço para mapear quando minha foreing key é um campo diferente da primary key???
[]s