Olá gente.
Estou montando um cadastro telefônico, onde trabalho com 3 tabelas:
- pessoas
- telefones
- pessoas_telefones (para fazer o link da pessoa com o telefone).
O problema acontece quando eu vou inserir mais um telefone para a pessoa. O telefone e gravado normalmente, porém, na tabela auxiliar, ele apaga o link anterior que tinha cadastrado.
ex:
Tabela pessoa | Tabela auxiliar | Tabela Telefones
Pessoa 1 | pessoa 1 - telefone 1 | Telefone 1
Pessoa 2 | pessoa 2 - telefone 2 | Telefone 2
Pessoa 1 | pessoa 1 - telefone 3 | Telefone 3
A tabela auxiliar deveria constar para pessoa 1, dois telefones (1 e 3)
Não sei se isso está ocorrendo pois estou efetuando uma atualização completa do cadastro, então ele acaba alterando o dado da tabela.
Na verdade ele teria de fazer uma inclusão do novo tel, certo?
Não estou achando como corrigir este erro. Se alguém conseguir me ajudar, agradeço.
@Table(name = "pessoas")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idpessoa;
@Column(nullable = false)
private String nome;
@Column(nullable = false)
private String endereco;
@Column(nullable = false)
private int numero;
private String complemento;
@Column(nullable = false)
private String bairro;
@Column(nullable = false)
private String cidade;
@Column(nullable = false)
private String uf;
private LocalDate aniversario;
private LocalDate cadastro;
@Column(nullable = false )
private String cpf;
@OneToMany(fetch = FetchType.LAZY,
cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}) // define em quais situações será utlizado
private List<Phone> telefones = new ArrayList<>(); // cria uma lista telefone através da classe Telefone
@Table(name = "telefones")
public class Phone {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idtelefone;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private PhoneType tipo;
@Column(nullable = false )
private String numero;
}
public class PersonService {
private PersonRepository repository;
public Person grava(Person person){
return repository.save(person);
}
public List<Person> lista(){
List<Person> pessoa = repository.findAll();
return pessoa;
}
public Person listaId(int id) throws PersonNotFoundException {
Person person = repository.findById(id)
.orElseThrow(() -> new PersonNotFoundException(id));
return person;
}
public void delete(int id) throws PersonNotFoundException{
repository.findById(id)
.orElseThrow(() -> new PersonNotFoundException(id));
repository.deleteById(id);
}
public Person altera(int id, Person person) throws PersonNotFoundException {
Person pessoa = repository.findById(id)
.orElseThrow(() -> new PersonNotFoundException(id));
return repository.save(person);
}
}