Olá senhores,
estou com um problema em uma herança de pessoa para PF e PJ, já tentei arrumar de diversas formas mas nada parece dar certo.
classe pessoa:
@Entity
@Table(name="pessoa",schema="public")
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer idpessoa;
private Endereco endereco;
private Contato contato;
private String nome;
private boolean ativo;
private TipoPessoaEnum tipoPessoa;
private Set usuarios = new HashSet(0);
public Pessoa() {
}
public Pessoa(Integer idpessoa, String nome, boolean ativo, TipoPessoaEnum tipoPessoa) {
this.idpessoa = idpessoa;
this.nome = nome;
this.ativo = ativo;
this.tipoPessoa = tipoPessoa;
}
public Pessoa(Integer idpessoa, Endereco endereco, Contato contato, String nome, boolean ativo, Set usuarios, TipoPessoaEnum tipoPessoa) {
this.idpessoa = idpessoa;
this.endereco = endereco;
this.contato = contato;
this.nome = nome;
this.ativo = ativo;
this.usuarios = usuarios;
this.tipoPessoa = tipoPessoa;
}
@SequenceGenerator(name = "pessoa_idpessoa_seq", sequenceName = "public.pessoa_idpessoa_seq", allocationSize = 1, initialValue = 1)
@Id
@Column(name="idpessoa", unique=true, nullable=false)
@GeneratedValue(generator="pessoa_idpessoa_seq")
public Integer getIdpessoa() {
return this.idpessoa;
}
public void setIdpessoa(Integer idpessoa) {
this.idpessoa = idpessoa;
}
@ManyToOne(cascade= CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name="idendereco")
public Endereco getEndereco() {
return this.endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
@ManyToOne(cascade= CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name="idcontato")
public Contato getContato() {
return this.contato;
}
public void setContato(Contato contato) {
this.contato = contato;
}
@Column(name="nome", nullable=false, length=100)
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "tppessoa", nullable = false, length = 1)
@Enumerated(EnumType.STRING)
public TipoPessoaEnum getTipoPessoa() {
return tipoPessoa;
}
public void setTipoPessoa(TipoPessoaEnum tipoPessoa) {
this.tipoPessoa = tipoPessoa;
}
@Column(name="ativo", nullable=false)
public boolean isAtivo() {
return this.ativo;
}
public void setAtivo(boolean ativo) {
this.ativo = ativo;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="pessoa", targetEntity=Usuario.class)
public Set getUsuarios() {
return this.usuarios;
}
public void setUsuarios(Set usuarios) {
this.usuarios = usuarios;
}
}
classe pessoa física:
@Entity
@Table(name="pessoaf",schema="public")
@PrimaryKeyJoinColumn(name = "idpessoaf")
//@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoaf extends Pessoa {
private static final long serialVersionUID = 1L;
private Escolaridade escolaridade;
private Pessoaj pessoaj;
private Estadocivil estadocivil;
private Conhecimentoevento conhecimentoevento;
private Cargoocupa cargoocupa;
private String cpf;
private String rg;
private String dsorgaoemissor;
private Date dtnasicmento;
private SexoEnum sexo;
private Set inscricaos = new HashSet(0);
public Pessoaf() {
this.setTipoPessoa(TipoPessoaEnum.F);
this.setEndereco(new Endereco());
}
public Pessoaf(Escolaridade escolaridade, String cpf, Date dtnasicmento, SexoEnum sexo) {
this.escolaridade = escolaridade;
this.cpf = cpf;
this.dtnasicmento = dtnasicmento;
this.sexo = sexo;
}
public Pessoaf(Escolaridade escolaridade, Pessoaj pessoaj, Estadocivil estadocivil, Conhecimentoevento conhecimentoevento, Cargoocupa cargoocupa, String cpf, String rg, String dsorgaoemissor, Date dtnasicmento, SexoEnum sexo, Set inscricaos) {
this.escolaridade = escolaridade;
this.pessoaj = pessoaj;
this.estadocivil = estadocivil;
this.conhecimentoevento = conhecimentoevento;
this.cargoocupa = cargoocupa;
this.cpf = cpf;
this.rg = rg;
this.dsorgaoemissor = dsorgaoemissor;
this.dtnasicmento = dtnasicmento;
this.sexo = sexo;
this.inscricaos = inscricaos;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="idescolaridade", nullable=false)
public Escolaridade getEscolaridade() {
return this.escolaridade;
}
public void setEscolaridade(Escolaridade escolaridade) {
this.escolaridade = escolaridade;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="idpessoaj")
public Pessoaj getPessoaj() {
return this.pessoaj;
}
public void setPessoaj(Pessoaj pessoaj) {
this.pessoaj = pessoaj;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="idestadocivil")
public Estadocivil getEstadocivil() {
return this.estadocivil;
}
public void setEstadocivil(Estadocivil estadocivil) {
this.estadocivil = estadocivil;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="idconhecimentoevento")
public Conhecimentoevento getConhecimentoevento() {
return this.conhecimentoevento;
}
public void setConhecimentoevento(Conhecimentoevento conhecimentoevento) {
this.conhecimentoevento = conhecimentoevento;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="idcargoocupa")
public Cargoocupa getCargoocupa() {
return this.cargoocupa;
}
public void setCargoocupa(Cargoocupa cargoocupa) {
this.cargoocupa = cargoocupa;
}
@Column(name="cpf", nullable=false, length=11)
public String getCpf() {
return this.cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
@Column(name="rg", length=40)
public String getRg() {
return this.rg;
}
public void setRg(String rg) {
this.rg = rg;
}
@Column(name="dsorgaoemissor", length=40)
public String getDsorgaoemissor() {
return this.dsorgaoemissor;
}
public void setDsorgaoemissor(String dsorgaoemissor) {
this.dsorgaoemissor = dsorgaoemissor;
}
@Temporal(TemporalType.DATE)
@Column(name="dtnasicmento", nullable=false, length=13)
public Date getDtnasicmento() {
return this.dtnasicmento;
}
public void setDtnasicmento(Date dtnasicmento) {
this.dtnasicmento = dtnasicmento;
}
@Column(name="sexo", nullable=false, length=1)
@Enumerated(EnumType.STRING)
public SexoEnum getSexo() {
return this.sexo;
}
public void setSexo(SexoEnum sexo) {
this.sexo = sexo;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="pessoaf", targetEntity=Inscricao.class)
public Set getInscricaos() {
return this.inscricaos;
}
public void setInscricaos(Set inscricaos) {
this.inscricaos = inscricaos;
}
}
classe PessoaFísicaBean:
@ManagedBean(name = "PessoaFisicaBean")
public class PessoaFisicaBean {
private static final long serialVersionUID = 1L;
private Conecta con;
private Pessoaf pessoaF;
public Pessoaf getPessoaF() {
return pessoaF;
}
public void setPessoaF(Pessoaf pessoaF) {
this.pessoaF = pessoaF;
}
public PessoaFisicaBean() {
con = new Conecta();
this.setPessoaF(new Pessoaf());
}
public static void main(String[] args) {
try {
Conecta con = new Conecta();
Escolaridade esc = (Escolaridade) con.getList("from Escolaridade").get(0);
Pessoaf pessoaF = new Pessoaf();
pessoaF.setIdpessoa(1);
pessoaF.setEscolaridade(esc);
pessoaF.setAtivo(true);
pessoaF.setEndereco(new Endereco(null, "rua a"));
pessoaF.setCpf("12345978");
pessoaF.setDsorgaoemissor("ssp");
pessoaF.setNome("teste");
pessoaF.setRg("13245678");
pessoaF.setSexo(SexoEnum.M);
pessoaF.setDtnasicmento(new Date());
con.insert(pessoaF);
} catch (Exception ex) {
Logger.getLogger(EventoBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
não consigo gravar pessoa física de forma alguma, PJ eu nem tentei ainda, o erro é sempre o mesmo:
Conexão Aberta!
Hibernate: select escolarida0_.idescolaridade as idescola1_16_, escolarida0_.codescolaridade as codescol2_16_, escolarida0_.descricao as descricao16_ from public.escolaridade escolarida0_
Conexão Encerrada!
Conexão Aberta!
Hibernate: select nextval ('public.pessoa_idpessoa_seq')
Hibernate: insert into public.endereco (bairro, cep, complemento, logradouro, idmunicipio, numero) values (?, ?, ?, ?, ?, ?)
Hibernate: insert into public.pessoa (ativo, idcontato, idendereco, nome, tppessoa, idpessoa) values (?, ?, ?, ?, ?, ?)
Hibernate: insert into public.pessoaf (idcargoocupa, idconhecimentoevento, cpf, dsorgaoemissor, dtnasicmento, idescolaridade, idestadocivil, idpessoaj, rg, sexo, idpessoaf) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Nov 08, 2012 3:23:27 PM org.hibernate.util.JDBCExceptionReporter logExceptions
Advertência: SQL Error: 0, SQLState: 23502
Nov 08, 2012 3:23:27 PM org.hibernate.util.JDBCExceptionReporter logExceptions
Grave: ERRO: valor nulo na coluna "idpessoa" viola a restrição não-nula
Generic Persistence -> Erro na inserção :could not insert: [entity.Pessoaf]
Conexão Encerrada!
Nov 08, 2012 3:23:27 PM org.hibernate.event.def.AbstractFlushingEventListener performExecutions
Grave: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert: [entity.Pessoaf]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at Util.Conecta.insert(Conecta.java:88)
at bean.PessoaFisicaBean.main(PessoaFisicaBean.java:62)
Caused by: org.postgresql.util.PSQLException: ERRO: valor nulo na coluna "idpessoa" viola a restrição não-nula
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2250)
... 10 more
Nov 08, 2012 3:23:27 PM bean.PessoaFisicaBean main
Grave: null
org.hibernate.exception.ConstraintViolationException: could not insert: [entity.Pessoaf]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2660)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at Util.Conecta.insert(Conecta.java:88)
at bean.PessoaFisicaBean.main(PessoaFisicaBean.java:62)
Caused by: org.postgresql.util.PSQLException: ERRO: valor nulo na coluna "idpessoa" viola a restrição não-nula
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2250)
... 10 more
no banco o id de pessoa é idpessoa, de PF é idpessoaf e de PJ é idpessoaj,
alguém pode me ajudar?
Massa!