Bom dia senhores…
estou com um problema…
Estou aumentando meu projeto, antes ele cadastrava usuários sem distinguir, pessoa física de pessoa jurídica, agora criei as seguintes classes e mapeei no hibernate:
Pessoa:
[code]package com.aquaRj.model.cadastro;
import java.io.Serializable;
import javax.persistence.*;
package com.aquaRj.model.cadastro;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name=“tipo”)
@SequenceGenerator(name = “codpessoa”, sequenceName = “pessoa_codpessoa_seq”, allocationSize = 1, initialValue = 100000)
public abstract class Pessoa implements Serializable {
private static final long serialVersionUID = 1000L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "codpessoa")
@Column(name="codpessoa")
private long codPessoa;
@Column(name="nome", length=50, nullable=false)
private String nome;
@Column(name="tipoeessoa", length=14, nullable=false)
private String tipoPessoa;
@ManyToOne
@JoinColumn(name = "codendereco")
private Endereco endereco;
@ManyToOne
@JoinColumn(name = "codtelefone")
private Telefone telefone;[/code]
PessoaFisica
[code]package com.aquaRj.model.cadastro;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
@Entity
@DiscriminatorValue(“pessoaFisica”)
@Table(name=“pessoafisica”)
public class PessoaFisica extends Pessoa implements Serializable {
private static final long serialVersionUID = 1000L;
@Id
@Column(name="cpf", length=14, nullable=false, unique=true)
private String cpf;
@Temporal(TemporalType.DATE)
@Column(name="datanascimento", nullable=false)
private Date datanascimento;
@Column(name="sexo", length=1, nullable=false)
private char sexo;[/code]
PessoaJuridica:
[code]package com.aquaRj.model.cadastro;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@DiscriminatorValue(“pessoaJuridica”)
@Table(name=“pessoajuridica”)
public class PessoaJuridica extends Pessoa implements Serializable{
private static final long serialVersionUID = 1000L;
@Id
@Column(name="cnpj", length=18, nullable=false, unique=true)
private String cnpj;
@Column(name="razaosocial", length=50, nullable=false)
private String razaoSocial;
@Column(name="nomefantasia", length=50, nullable=false)
private String nomeFantasia;
@Column(name="inscricaoestadual", length=10, nullable=false)
private String inscricaoEstadual;[/code]
Endereco:
[code]package com.aquaRj.model.cadastro;
import java.io.Serializable;
import javax.persistence.;
import java.util.;
@Entity
@Table(name=“endereco”)
@SequenceGenerator(name = “codendereco”, sequenceName = “endereco_codendereco_seq”, allocationSize = 1, initialValue = 100000)
public class Endereco implements Serializable {
private static final long serialVersionUID = 1000L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "codendereco")
@Column(name="codendereco")
private long codendereco;
@OneToMany(mappedBy="endereco")
private List<Pessoa> pessoa;
@Column(name="tipo", length=1, nullable=false)
private char tipo;
@Column(name="logradouro", length=60, nullable=false)
private String logradouro;
@Column(name="numero", nullable=false)
private Integer numero;
@Column(name="bairro", length=30, nullable=false)
private String bairro;
@Column(name="cidade", length=40, nullable=false)
private String cidade;
@Column(name="estado", length=40, nullable=false)
private String estado;
@Column(name="cep", length=9, nullable=false)
private String cep;[/code]
Telefone:
[code]package com.aquaRj.model.cadastro;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
@Entity
@Table(name=“telefone”)
@SequenceGenerator(name = “codtelefone”, sequenceName = “telefone_codtelefone_seq”, allocationSize = 1, initialValue = 100000)
public class Telefone implements Serializable{
private static final long serialVersionUID = 1000L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "codtelefone")
@Column(name="codtelefone")
private long codtelefone;
@OneToMany(mappedBy="telefone")
private List<Pessoa> pessoa;
@Column(name="telefone", length=9, nullable=false)
private String telefone;
@Column(name="celular", length=9, nullable=false)
private String celular;[/code]
Conta:
[code]package com.aquaRj.model.cadastro;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name=“conta”)
@SequenceGenerator(name = “codconta”, sequenceName = “conta_codconta_seq”, allocationSize = 1, initialValue = 100000)
public class Conta implements Serializable{
private static final long serialVersionUID = 1000L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "codconta")
@Column(name="codconta")
private long codconta;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "codpessoa")
private Pessoa pessoa;
@Column(name="email", length=40, nullable=false, unique=true)
private String email;
@Column(name="senha", nullable=false)
private String senha;[/code]
Bom… eu tenho tb o PessoaDao:
[code]package com.aquaRj.persistence;
import org.hibernate.;
import com.aquaRj.hibernate.HibernateUtil;
import com.aquaRj.model.cadastro.;
public class PessoaDao {
protected Session s;
protected Transaction t;
protected Query q;
public void salvar(Pessoa pessoa) throws Exception {
s = HibernateUtil.getInstance();
t = s.beginTransaction();
s.save(pessoa);
t.commit();
}
public void excluir(Pessoa pessoa) throws Exception {
s = HibernateUtil.getInstance();
t = s.beginTransaction();
s.delete(pessoa);
t.commit();
}
public void atualizar(Pessoa pessoa) throws Exception {
s = HibernateUtil.getInstance();
t = s.beginTransaction();
s.update(pessoa);
t.commit();
}
public Pessoa obterPorId(long codPessoa) throws Exception {
s = HibernateUtil.getInstance();
return (Pessoa) s.get(Pessoa.class, codPessoa);
}
public Conta autenticar(String login, String senha) {
q = s.createQuery("from Conta cont where cont.email = :lg and cont.senha = :md5(sen)");
q.setString("lg", login);
q.setString("sen", senha);
return (Conta)q.uniqueResult();
}
public boolean cpfExistente(String cpf) throws Exception {
boolean valid = false;
s = HibernateUtil.getInstance();
q = s.createQuery("from PessoaFisica pf where p.cpf = :cpf");
q.setString("cpf", cpf);
String cpfExistente = (String) q.uniqueResult();
if (cpfExistente != null) {
valid = true;
}
return valid;
}
public boolean cnpjExistente(String cnpj) throws Exception {
boolean valid = false;
s = HibernateUtil.getInstance();
q = s.createQuery("from PessoaJuridica pj where pj.cnpj = :cnpj");
q.setString("cnpj", cnpj);
String cnpjExistente = (String) q.uniqueResult();
if (cnpjExistente != null) {
valid = true;
}
return valid;
}
}[/code]
Esse ultimo (PessoaDao), eu tinha montado para salvar o usuário que não distinguia PessoaFisica de PessoaJuridica (Era uma classe pessoa com todos os atributos dentro, não estendia, não tinha relacionamento entre endereço, telefone e conta…) o problema é que não sei como montar esse Dao para salvar “Pessoa” dessa nova forma que fiz…
Alguem pode me ajudar??