Olá Rodrigo! Consegui salvar na tabela clientes mesmo depois que adicionei os seters do nome e cpf na classe Cliente. Acho que a ideia é essa mesmo, obrigado!
package br.com.alura.loja.modelo;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Embedded
private DadosPessoais dadosPessoais;
public Cliente() {}
public Cliente(String nome, String cpf) {
this.dadosPessoais = new DadosPessoais(nome, cpf);
}
public String getNome() {
return this.dadosPessoais.getNome();
}
public String getCpf() {
return this.dadosPessoais.getCpf();
}
public void setNome(String nome) {
this.dadosPessoais.setNome(nome);
}
public void setCpf(String cpf) {
this.dadosPessoais.setCpf(cpf);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public DadosPessoais getDadosPessoais() {
return dadosPessoais;
}
}
package br.com.alura.loja.modelo;
import javax.persistence.Embeddable;
@Embeddable
public class DadosPessoais {
private String nome;
private String cpf;
public DadosPessoais() {}
public DadosPessoais(String nome, String cpf) {
this.nome = nome;
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public String getCpf() {
return cpf;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
}
package br.com.alura.loja.dao;
import java.util.List;
import javax.persistence.EntityManager;
import br.com.alura.loja.modelo.Cliente;
import br.com.alura.loja.modelo.DadosPessoais;
public class ClienteDao {
private EntityManager em;
public ClienteDao(EntityManager em) {
this.em = em;
}
public void cadastrar(Cliente cliente) {
this.em.persist(cliente);
}
public void atualizarProduto(Cliente cliente) {
this.em.merge(cliente);
}
public void remover(Cliente cliente) {
this.em.remove(cliente);
}
public Cliente buscarPorId(Long id) {
return em.find(Cliente.class, id);
}
public List<Cliente> buscarTodos(){
String jpql = "SELECT c FROM Cliente c";
return em.createQuery(jpql, Cliente.class).getResultList();
}
public List<Cliente> buscarPorNome(String nome){
String jpql = "SELECT c FROM Cliente c WHERE c.dadosPessoais.nome = ?1";
return em.createQuery(jpql, Cliente.class)
.setParameter(1, nome).getResultList();
}
}