Hibernate - Mapear herança

0 respostas
Marques

Lista,

Tenho a classe Pessoa que é a base para PessoaFisica e PessoaJuridica.
Funcionário extends PessoaFisica.

Então fiz o mapeamento no hibernate conforme abaixo.

Porém se tiro a opção autoincrement no mysql eu recebo a exception:
org.hibernate.HibernateException: The database returned no natively generated identity value

E se deixo, no mysql, a opção autoincrement habilitada recebo a exception:
java.sql.SQLException: Cannot add or update a child row: a foreign key constraint fails

Onde está o meu erro?

Tks,

Marques

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa implements Serializable {
	
	private Integer idPessoa;
	private String telefone;
	private String email;
	private Endereco endereco;
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	@OneToOne(cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	public Endereco getEndereco() {
		return endereco;
	}
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
	
	@Id
	@GeneratedValue	
	public Integer getIdPessoa() {
		return idPessoa;
	}
	public void setIdPessoa(Integer idPessoa) {
		this.idPessoa = idPessoa;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

}
import java.util.Date;

import javax.persistence.Entity;

@Entity
public class PessoaFisica extends Pessoa {

	private String celular;
	private String nome;
	private Date dataNasc;
	private Integer sexo;
	private Integer estadoCivil;
	private Integer grauInstrucao;
	private String nomeMae;
	private String nomePai;
	private String cidadeNasc;
	private Integer estadoNasc;
	private String nacionalidade;
	private String ctps;
	private String serieCtps;
	private String cpf;
	private String rg;
	private String emissorRg;
	private String certMilitar;
	private String tituloEleitor;
	private String zonaEleitoral;
	private String secaoEleitoral;
	private String cnh;
	private String categoriaCnh;
	private Date dataEmissaoCnh;
	private String pis;	

	public String getCategoriaCnh() {
		return categoriaCnh;
	}
	public void setCategoriaCnh(String categoriaCnh) {
		this.categoriaCnh = categoriaCnh;
	}
	public String getCertMilitar() {
		return certMilitar;
	}
	public void setCertMilitar(String certMilitar) {
		this.certMilitar = certMilitar;
	}
	public String getCidadeNasc() {
		return cidadeNasc;
	}
	public void setCidadeNasc(String cidadeNasc) {
		this.cidadeNasc = cidadeNasc;
	}
	public String getCnh() {
		return cnh;
	}
	public void setCnh(String cnh) {
		this.cnh = cnh;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public String getCtps() {
		return ctps;
	}
	public void setCtps(String ctps) {
		this.ctps = ctps;
	}
	public Date getDataEmissaoCnh() {
		return dataEmissaoCnh;
	}
	public void setDataEmissaoCnh(Date dataEmissaoCnh) {
		this.dataEmissaoCnh = dataEmissaoCnh;
	}
	public String getEmissorRg() {
		return emissorRg;
	}
	public void setEmissorRg(String emissorRg) {
		this.emissorRg = emissorRg;
	}
	public Integer getEstadoCivil() {
		return estadoCivil;
	}
	public void setEstadoCivil(Integer estadoCivil) {
		this.estadoCivil = estadoCivil;
	}
	public Integer getEstadoNasc() {
		return estadoNasc;
	}
	public void setEstadoNasc(Integer estadoNasc) {
		this.estadoNasc = estadoNasc;
	}
	public Integer getGrauInstrucao() {
		return grauInstrucao;
	}
	public void setGrauInstrucao(Integer grauInstrucao) {
		this.grauInstrucao = grauInstrucao;
	}
	public String getNacionalidade() {
		return nacionalidade;
	}
	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}
	public String getNomeMae() {
		return nomeMae;
	}
	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}
	public String getNomePai() {
		return nomePai;
	}
	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}
	public String getRg() {
		return rg;
	}
	public void setRg(String rg) {
		this.rg = rg;
	}
	public String getSecaoEleitoral() {
		return secaoEleitoral;
	}
	public void setSecaoEleitoral(String secaoEleitoral) {
		this.secaoEleitoral = secaoEleitoral;
	}
	public String getSerieCtps() {
		return serieCtps;
	}
	public void setSerieCtps(String serieCtps) {
		this.serieCtps = serieCtps;
	}
	public String getTituloEleitor() {
		return tituloEleitor;
	}
	public void setTituloEleitor(String tituloEleitor) {
		this.tituloEleitor = tituloEleitor;
	}
	public String getZonaEleitoral() {
		return zonaEleitoral;
	}
	public void setZonaEleitoral(String zonaEleitoral) {
		this.zonaEleitoral = zonaEleitoral;
	}
	public String getCelular() {
		return celular;
	}
	public void setCelular(String celular) {
		this.celular = celular;
	}
	public Date getDataNasc() {
		return dataNasc;
	}
	public void setDataNasc(Date dataNasc) {
		this.dataNasc = dataNasc;
	}
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Integer getSexo() {
		return sexo;
	}
	public void setSexo(Integer sexo) {
		this.sexo = sexo;
	}
	public String getPis() {
		return pis;
	}
	public void setPis(String pis) {
		this.pis = pis;
	}
}
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Entity;

@Entity
public class Funcionario extends PessoaFisica {	
	
	private String registroFunc;
	private Date dataAdmissao;
	private Date dataDemissao;
	private Integer centroCusto;
	private Integer funcao;
	private Integer tipoPagto;
	private Integer tipoContratacao;
	private Integer turno;
	private BigDecimal salario;

	public Integer getCentroCusto() {
		return centroCusto;
	}

	public void setCentroCusto(Integer centroCusto) {
		this.centroCusto = centroCusto;
	}

	public Date getDataAdmissao() {
		return dataAdmissao;
	}

	public void setDataAdmissao(Date dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}

	public Date getDataDemissao() {
		return dataDemissao;
	}

	public void setDataDemissao(Date dataDemissao) {
		this.dataDemissao = dataDemissao;
	}

	public Integer getFuncao() {
		return funcao;
	}

	public void setFuncao(Integer funcao) {
		this.funcao = funcao;
	}

	public String getRegistroFunc() {
		return registroFunc;
	}

	public void setRegistroFunc(String registroFunc) {
		this.registroFunc = registroFunc;
	}

	public BigDecimal getSalario() {
		return salario;
	}

	public void setSalario(BigDecimal salario) {
		this.salario = salario;
	}

	public Integer getTipoContratacao() {
		return tipoContratacao;
	}

	public void setTipoContratacao(Integer tipoContratacao) {
		this.tipoContratacao = tipoContratacao;
	}

	public Integer getTipoPagto() {
		return tipoPagto;
	}

	public void setTipoPagto(Integer tipoPagto) {
		this.tipoPagto = tipoPagto;
	}

	public Integer getTurno() {
		return turno;
	}

	public void setTurno(Integer turno) {
		this.turno = turno;
	}

}
Criado 27 de dezembro de 2006
Respostas 0
Participantes 1