cl_cod_cliente integer (PK)
//...restante dos campos
te_cod_cliente(FK)
//...restante dos campos
No formulário de cadastro de cliente fiz todos os campos de cadastro de cliente e três campos do tipo texto para cadastrar o telefone comercial, telefone residencial e telefone celular. Basicamente o formulário iria inserir primeiro o cliente na tabela Cliente e depois capturar o código desse cliente para inserir os telefones na tabela Telefone. Abaixo as classes:
Classe Cliente:package br.bmweb.bean;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name="TB_CLIENTE", schema="bmweb")
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Cliente {
private int cod_cliente;
private String documento, rg, nome, contato, mercado, placa, email, profissao, newsletter;
private Date data_nascimento, data_cadastro;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name="CL_COD_CLIENTE", nullable = false)
public int getCod_cliente() {
return cod_cliente;
}
public void setCod_cliente(int codCliente) {
cod_cliente = codCliente;
}
@OneToMany(mappedBy="cliente", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
//private Collection<Orcamento> orcamentos;
private Orcamento orcamento;
@OneToMany(mappedBy="cliente", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
//private Collection<Usuario> usuarios;
private Usuario usuario;
@OneToMany(mappedBy="cliente", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
//private Collection<Endereco> enderecos;
private Endereco endereco;
@OneToMany(mappedBy="cliente", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
//private Collection<Telefone> telefones;
private Telefone telefone;
public Orcamento getOrcamento() {
return orcamento;
}
public void setOrcamento(Orcamento orcamento) {
this.orcamento = orcamento;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
public Telefone getTelefone() {
return telefone;
}
public void setTelefone(Telefone telefone) {
this.telefone = telefone;
}
@Column(name="CL_DOCUMENTO", nullable = false)
public String getDocumento() {
return documento;
}
public void setDocumento(String documento) {
this.documento = documento;
}
@Column(name="CL_RG", nullable = false)
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
@Column(name="CL_NOME", nullable = false)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name="CL_CONTATO", nullable = false)
public String getContato() {
return contato;
}
public void setContato(String contato) {
this.contato = contato;
}
@Column(name="CL_MERCADO", nullable = false)
public String getMercado() {
return mercado;
}
public void setMercado(String mercado) {
this.mercado = mercado;
}
@Column(name="CL_PLACA", nullable = false)
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
@Column(name="CL_EMAIL", nullable = false)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name="CL_PROFISSAO", nullable = false)
public String getProfissao() {
return profissao;
}
public void setProfissao(String profissao) {
this.profissao = profissao;
}
@Column(name="CL_NEWS_LETTER", nullable = false)
public String getNewsletter() {
return newsletter;
}
public void setNewsletter(String newsletter) {
this.newsletter = newsletter;
}
@Column(name="CL_DATA_NASCIMENTO", nullable = false)
public Date getData_nascimento() {
return data_nascimento;
}
public void setData_nascimento(Date dataNascimento) {
data_nascimento = dataNascimento;
}
@Column(name="CL_DATA_CADASTRO", nullable = false)
public Date getData_cadastro() {
return data_cadastro;
}
public void setData_cadastro(Date dataCadastro) {
data_cadastro = dataCadastro;
}
}
package br.bmweb.bean;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="TB_TELEFONE", schema="bmweb")
@DiscriminatorValue("2")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Telefone extends Cliente{
private int cod_fone, cod_cliente;
private String ddd, telefone, ramal, tipo_fone;
@Id
@GeneratedValue
@Column(name="TE_COD_TELEFONE", nullable = false)
public int getCod_fone() {
return cod_fone;
}
public void setCod_fone(int codFone) {
cod_fone = codFone;
}
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinColumn(name="CL_COD_CLIENTE")
//@Column(name = "TE_COD_CLIENTE", nullable = false)
private Cliente cliente;
//Cliente cliente = new Cliente();
@Column(name="TE_COD_CLIENTE", nullable = false)
public int getCod_cliente() {
return cod_cliente;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public void setCod_cliente(int codCliente) {
cod_cliente = codCliente;
}
@Column(name="TE_DDD", nullable = false)
public String getDdd() {
return ddd;
}
public void setDdd(String ddd) {
this.ddd = ddd;
}
@Column(name="TE_FONE", nullable = false)
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
@Column(name="TE_RAMAL", nullable = false)
public String getRamal() {
return ramal;
}
public void setRamal(String ramal) {
this.ramal = ramal;
}
@Column(name="TE_TIPO_FONE", nullable = false)
public String getTipo_fone() {
return tipo_fone;
}
public void setTipo_fone(String tipoFone) {
tipo_fone = tipoFone;
}
}
public void adiciona(Cliente cliente){
validator.onErrorUse(Results.page()).of(ClienteController.class).index2();
Telefone telefone = new Telefone();
daotelefone.gravar(telefone);
dao.gravar(cliente);
result.redirectTo(ClienteController.class).index2();
}
public class ClienteDao {
public void gravar(Cliente cliente){
Session session = new AbreSession().getSession();
Transaction tx = session.beginTransaction();
Telefone telefone = new Telefone();
cliente.setTelefone(telefone);
telefone.setCliente(cliente);
session.save(telefone);
session.save(cliente);
tx.commit();
session.close();
}
}
public void adiciona(Telefone telefone){
dao.gravar(telefone);
}
public void gravar(Telefone telefone){
Session session = new AbreSession().getSession();
Transaction tx = session.beginTransaction();
session.save(telefone);
tx.commit();
session.close();
}