Olá,
tenho a entidade Cliente com @Embedded:
@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 dadosPessoais.getNome();
}
public String getCpf() {
return dadosPessoais.getCpf();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public DadosPessoais getDadosPessoais() {
return dadosPessoais;
}
}
e a entidade DadosPessoais com @Embeddable:
@Embeddable
public class DadosPessoais implements Serializable {
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;
}
}
a minha dúvida é:
quais da entidades preciso criar no repository?
só a entidade Cliente, só a DadosPessoais, ou as duas?
valeu! obrigado.
Somente o Repository de cliente, pois dados pessoais faz parte de cliente, da forma como você modelou os dados pessoais vão para a mesma tabela de cliente, a única diferença é que está serapado em classes distintas, mas pertence única e exclusivamente à cliente.
Certo.
Aproveito para tirar outra dúvida:
tenho uma entidade com chave composta, como faço para declarar o extends do crud pois não aceita duas chaves.
Categoria2:
@Entity
@Table(name = "categorias2")
public class Categoria2 {
@EmbeddedId
private Categoria2Id Id;
public Categoria2() {
}
public Categoria2(String nome) {
this.Id = new Categoria2Id(nome, 2);
}
public String getNome() {
return this.Id.getNome();
}
}
Categoria2Id:
@Embeddable
public class Categoria2Id implements Serializable {
private String nome;
private Integer tipo;
public Categoria2Id() {
}
public Categoria2Id(String nome, Integer tipo) {
this.nome = nome;
this.tipo = tipo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Integer getTipo() {
return tipo;
}
public void setTipo(Integer tipo) {
this.tipo = tipo;
}
}
Categoria2Repository
@Repository
public interface Categoria2Repository extends CrudRepository<Categoria2,String> {
}
mais uma vez obrigado!
Vc coloca no repositorio apenas o Categoria2Id:
CrudRepository<Categoria2, Categoria2Id>
Funcionou! Beleza!
Aproveitando, tenho outra dúvida:
tenho a entidade Cliente com Embedded para DadosPessoais, como faço para fazer os setter dos DadosPessoais no Crud?
entidade Cliente:
@Entity
@Table(name = "clientes")
public class Cliente {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Embedded
private DadosPessoais dadosPessoais;
public Cliente() {
// JPA sempre precisa de um construtor padrão
}
public Cliente(String nome, String cpf) {
this.dadosPessoais = new DadosPessoais(nome, cpf);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public DadosPessoais getDadosPessoais() {
return dadosPessoais;
}
}
entidade DadosPessoais:
@Embeddable
public class DadosPessoais implements Serializable {
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;
}
}
Crud:
private void salvar(Scanner scanner) {
System.out.println ("Informe o nome do Cliente:");
String nome = scanner.next().toUpperCase();
nome += scanner.nextLine().toUpperCase();
System.out.println ("Informe o CPF do Cliente:");
String cpf = scanner.next().toUpperCase();
cpf += scanner.nextLine().toUpperCase();
Cliente Cliente = new Cliente();
// Cliente.setNome(nome);
// Cliente.setCpf(cpf);
ClienteRepository.save(Cliente);
System.out.println ("Salvo!");
}
valeu pela ajuda! abraço!
DadosPessoais dadosPessoais = new DadosPessoais();
dadosPessoais.setNome("John Doe");
dadosPessoais.setCpf("00000000191");
Cliente cliente = new Cliente();
cliente.setDadosPessoais(dadosPessoais);
Valeu Jonathan, já vou implementar!
obrigado, Abraço.