PessoaDao() estendendo PessoaFisica e PessoaJuridica Hibernate

0 respostas
B

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:
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;
PessoaFisica
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;
PessoaJuridica:
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;
Endereco:
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;
Telefone:
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;
Conta:
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;
Bom... eu tenho tb o PessoaDao:
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;
	}
	
}

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??

Criado 18 de agosto de 2011
Respostas 0
Participantes 1