Galera estou estudando Herança no JPA e depois de muita pesquisa no amigo google[img] consegui fazer o seguinte exemplo abaixo: Porém ainda tenho algumas dúvidas.
para entenderem a minha dúvida observem os comentários dos mapeamentos das entidades persistentes.
1° Utilizando herança no JPA eu devo desprezar as anotações de relacionamento? Pois não consegui fazer funcionar com elas!
Se não como ficaria a inserção na classe de teste (Classe Main)? Se sim como eu recuperaria o objeto Pessoa ou PessoaFisica partindo de ClienteCheque?
2° Nas classes filhas não existe a necessidade dos métodos equals(), hashCode() e toString()? Se existir como ficariam?
3º Existem algo a mais que eu deveria saber?
[code]//Pessoa
package entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
@Entity
@Table(name = “pessoa”, catalog = “teste_jpa_4”, schema = “public”)
//Observe
@Inheritance(strategy = InheritanceType.JOINED)
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = “pes_cod_pessoa”, nullable = false)
private Long pesCodPessoa;
@Basic(optional = false)
@Column(name = “pes_nome”, nullable = false, length = 2147483647)
private String pesNome;
// @OneToOne(cascade = CascadeType.ALL, mappedBy = “pessoa”)
// private PessoaFisica pessoaFisica;
public Pessoa() {
}
public Pessoa(Long pesCodPessoa) {
this.pesCodPessoa = pesCodPessoa;
}
public Pessoa(Long pesCodPessoa, String pesNome) {
this.pesCodPessoa = pesCodPessoa;
this.pesNome = pesNome;
}
public Long getPesCodPessoa() {
return pesCodPessoa;
}
public void setPesCodPessoa(Long pesCodPessoa) {
this.pesCodPessoa = pesCodPessoa;
}
public String getPesNome() {
return pesNome;
}
public void setPesNome(String pesNome) {
this.pesNome = pesNome;
}
// public PessoaFisica getPessoaFisica() {
// return pessoaFisica;
// }
//
// public void setPessoaFisica(PessoaFisica pessoaFisica) {
// this.pessoaFisica = pessoaFisica;
// }
@Override
public int hashCode() {
int hash = 0;
hash += (pesCodPessoa != null ? pesCodPessoa.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Pessoa)) {
return false;
}
Pessoa other = (Pessoa) object;
if ((this.pesCodPessoa == null && other.pesCodPessoa != null) || (this.pesCodPessoa != null && !this.pesCodPessoa.equals(other.pesCodPessoa))) {
return false;
}
return true;
}
@Override
public String toString() {
return "entity.Pessoa[pesCodPessoa=" + pesCodPessoa + "]";
}
}[/code]
[code]
//Pessoa Fisica
package entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
@Entity
@Table(name = “pessoa_fisica”, catalog = “teste_jpa_4”, schema = “public”)
//Observe
@PrimaryKeyJoinColumn(name = “pes_cod_pessoa”)
public class PessoaFisica extends Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "pf_cpf", length = 14)
private String pfCpf;
// @JoinColumn(name = “pes_cod_pessoa”, referencedColumnName = “pes_cod_pessoa”, nullable = false, insertable = false, updatable = false)
// @OneToOne(optional = false)
// private Pessoa pessoa;
// @OneToOne(cascade = CascadeType.ALL, mappedBy = “pessoaFisica”)
// private ClienteCheque clienteCheque;
public PessoaFisica() {
}
public String getPfCpf() {
return pfCpf;
}
public void setPfCpf(String pfCpf) {
this.pfCpf = pfCpf;
}
// public Pessoa getPessoa() {
// return pessoa;
// }
//
// public void setPessoa(Pessoa pessoa) {
// this.pessoa = pessoa;
// }
//
// public ClienteCheque getClienteCheque() {
// return clienteCheque;
// }
//
// public void setClienteCheque(ClienteCheque clienteCheque) {
// this.clienteCheque = clienteCheque;
// }
}[/code]
[code]//Cliente Cheque
package entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@Table(name = “cliente_cheque”, catalog = “teste_jpa_4”, schema = “public”)
//Observe
@PrimaryKeyJoinColumn(name = “pes_cod_pessoa”)
public class ClienteCheque extends PessoaFisica implements Serializable {
private static final long serialVersionUID = 1L;
@Basic(optional = false)
@Column(name = "cc_data_cadastro", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date ccDataCadastro;
@Column(name = "controle")
private Integer controle;
// @JoinColumn(name = “pes_cod_pessoa”, referencedColumnName = “pes_cod_pessoa”, nullable = false, insertable = false, updatable = false)
// @OneToOne(optional = false)
// private PessoaFisica pessoaFisica;
public ClienteCheque() {
}
public Date getCcDataCadastro() {
return ccDataCadastro;
}
public void setCcDataCadastro(Date ccDataCadastro) {
this.ccDataCadastro = ccDataCadastro;
}
public Integer getControle() {
return controle;
}
public void setControle(Integer controle) {
this.controle = controle;
}
// @Override
// public PessoaFisica getPessoaFisica() {
// return pessoaFisica;
// }
//
// @Override
// public void setPessoaFisica(PessoaFisica pessoaFisica) {
// this.pessoaFisica = pessoaFisica;
// }
}[/code]
[code]//Classe Principal (Para testes)
package view;
import entity.ClienteCheque;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.swing.JOptionPane;
import persistence.Conexao;
import persistence.DatabaseException;
public class Main {
private ClienteCheque clienteCheque = new ClienteCheque();
private EntityManager manager;
public Main() {
salvar();
}
public void salvar() {
try {
manager = Conexao.getConexao();
manager.getTransaction().begin();
clienteCheque.setPesNome("Rogerio");
clienteCheque.setPfCpf("222.222.222-22");
clienteCheque.setCcDataCadastro(new Date());
clienteCheque.setControle(1);
manager.merge(clienteCheque);
manager.getTransaction().commit();
JOptionPane.showMessageDialog(null, "Salvou!");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Não Salvou! " + DatabaseException.findLastException(ex));
manager.getTransaction().rollback();
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String jo[]) {
new Main();
}
}[/code]