Boa tarde, estou exercitando o que foi dado neste curso fazendo um cadastro de clientes e estou tendo um problema, após preencher os dados no formulário de cadastro e dar o submit, os atributos do cliente estão sendo salvos no banco de dados, exceto o endereço. Alguém poderia me ajudar?
Na entity Cliente tenho o atributo Endereco anotado com @Embedded, que indica à JPA que ela deve entender Endereco como uma classe comum e não uma entity. Todos os campos relacionados a ela serão mapeados para dentro de Cliente. A classe Endereco não é uma entity, mas anotei com @Embeddable que indica à JPA que essa classe pode ser ‘anexada’ a uma entity.
Já utilizei relacionamento @ManyToOne e também não resolveu o problema.
Em ambos os casos o hibernate cria as tabelas no banco, considerando os atributos do endereço, sendo que no primeiro cria somente uma tabela (cliente + endereço), como esperado.
Segue abaixo os códigos:
import java.util.Calendar;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.springframework.format.annotation.DateTimeFormat;
@Entity
public class Cliente {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String nome;
@DateTimeFormat
private Calendar dataNascimento;
private String rg;
private String cpf;
private String telefone;
private String celular;
@Embedded
private Endereco endereco;
private String email;
private String senha;
private String imagemPath;
public Cliente() {
}
public Integer getId() {
return id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Calendar getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getImagemPath() {
return imagemPath;
}
public void setImagemPath(String imagemPath) {
this.imagemPath = imagemPath;
}
}
import javax.persistence.Embeddable;
@Embeddable
public class Endereco {
private String cep;
private String rua;
private String numero;
private String complemento;
private String bairro;
private String cidade;
private String uf;
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
}
<%@ taglib tagdir="/WEB-INF/tags" prefix="tags"%>
<%@ include file="/WEB-INF/WebServices/wsCorreios.jsp"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<tags:pageTemplate titulo="Consultório Dentário">
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<form:form action="${s:mvcUrl('CC#gravar').build() }" method="POST"
commandName="cliente" enctype="multipart/form-data">
<div class="container-fluid">
<div class="form-group" class="row">
<!-- DADOS PESSOAIS-->
<fieldset class="col-md-4">
<legend>Dados Pessoais</legend>
<div class="form-group">
<label>Nome completo*</label>
<form:input path="nome" id="nome" class="form-control"
value="${cliente.nome}" placeholder="Digite seu nome" />
<form:errors path="nome" />
</div>
<div class="form-group">
<label>Data de Nascimento</label>
<form:input path="dataNascimento" id="dataNascimento"
class="form-control" value="${cliente.dataNascimento}"
placeholder="dd/MM/aaaa" />
<form:errors path="dataNascimento" />
</div>
<div class="form-group">
<label>RG</label>
<form:input path="rg" id="rg" class="form-control"
value="${cliente.rg}" placeholder="00.000.000-0" />
</div>
<div class="form-group">
<label>CPF*</label>
<form:input path="cpf" id="cpf" class="form-control"
value="${cliente.cpf}" placeholder="000.000.000-00" />
<form:errors path="cpf" />
</div>
<div class="form-group">
<label>Telefone*</label>
<form:input path="telefone" id="telefone" class="form-control"
value="${cliente.telefone}" placeholder="(00) 0000-0000" />
<form:errors path="telefone" />
</div>
<div class="form-group">
<label>Celular</label>
<form:input path="celular" id="celular" class="form-control"
value="${cliente.celular}" placeholder="(00) 00000-0000" />
<form:errors path="celular" />
</div>
</fieldset>
<!-- ENDEREÇO -->
<fieldset class="col-md-4">
<legend>Endereço</legend>
<div class="form-group">
<label>CEP</label>
<input type="text" id="cep" name="cep" value="" size="10" maxlength="9" class="form-control"
value="${cliente.endereco.cep}" placeholder="Digite o cep">
</div>
<div class="form-group">
<label>Rua</label>
<input type="text" id="rua" name="rua" class="form-control">
</div>
<div class="form-group">
<label>Número</label>
<input type="text" id="numero" name="numero" size="5" class="form-control"
value="${cliente.endereco.numero}" placeholder="Digite o número">
</div>
<div class="form-group">
<label>Complemento</label>
<input type="text" id="complemento" name="complemento" size="40" class="form-control"
value="${cliente.endereco.complemento}" placeholder="Digite o complemento">
</div>
<div class="form-group">
<label>Bairro</label>
<input type="text" id="bairro" name="bairro" size="40" class="form-control">
</div>
<div class="form-group">
<label>Cidade</label>
<input type="text" id="cidade" name="cidade" size="40" class="form-control">
</div>
<div class="form-group">
<label>Estado</label>
<input type="text" id="uf" name="uf" size="2" class="form-control">
</div>
</fieldset>
<!-- DADOS DE LOGIN -->
<fieldset class="col-md-4">
<legend>Dados de login</legend>
<div class="form-group">
<label>E-mail</label>
<div class="input-group">
<span class="input-group-addon">@</span> <input type="email"
class="form-control" id="email" name="email"
value="${cliente.email}" placeholder="email@exemplo.com">
</div>
</div>
<div class="form-group">
<label>Senha</label>
<input type="password" id="senha" name="senha" class="form-control" placeholder="senha">
</div>
<div class="form-group">
<label>Confirme a senha</label>
<input type="password" id="passconfirm" name="passconfirm" class="form-control" placeholder="confirme sua senha">
</div>
<div class="form-group">
<label>Imagem</label> <input type="file" name="imagem">
</div>
<br />
<c:if test="${cliente.id != null}">
<div class="form-group">
<button type="submit" class="btn btn-success">Atualizar</button>
<input type="hidden" name="id" value="${cliente.id}">
</div>
</c:if>
<c:if test="${cliente.id == null}">
<div class="form-group">
<button type="submit" class="btn btn-primary">Cadastrar</button>
<button type="reset" value="Limpar" class="btn btn-default">Limpar</button>
</div>
</c:if>
<br />
</fieldset>
</div>
<!-- fim .form-group -->
</div>
<!-- fim .container -->
</form:form>
</div>
</tags:pageTemplate>
Repare que no log do console o hibernate está inserindo os valores referentes ao endereço:
Hibernate: insert into Cliente (celular, cpf, dataNascimento, email, bairro, cep, cidade, complemento, numero, rua, uf, imagemPath, nome, rg, senha, telefone) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: select cliente0_.id as id1_0_, cliente0_.celular as celular2_0_, cliente0_.cpf as cpf3_0_, cliente0_.dataNascimento as dataNasc4_0_, cliente0_.email as email5_0_, cliente0_.bairro as bairro6_0_, cliente0_.cep as cep7_0_, cliente0_.cidade as cidade8_0_, cliente0_.complemento as compleme9_0_, cliente0_.numero as numero10_0_, cliente0_.rua as rua11_0_, cliente0_.uf as uf12_0_, cliente0_.imagemPath as imagemP13_0_, cliente0_.nome as nome14_0_, cliente0_.rg as rg15_0_, cliente0_.senha as senha16_0_, cliente0_.telefone as telefon17_0_ from Cliente cliente0_