Olá, estou criando um projetinho pessoal que tinha feito com JPA agora fazendo ele com Spring. Minha duvida é na hora de salvar no banco o objeto Membro, o membro tem um relacionamento com endereço, ai estou salvando o endereço primeiro, depois busco o endereço e utilizo o metódo set para colocar ele no membro, só que está dando alguns problemas. O principal é um erro de compilação poque estou utilizando o Optional, ai na hora de setar o endereço no membro não está compilando.
Vou deixar o código abaixo:
Classe Membro:
@Entity
@Table(name = "tb_membros")
@Getter
@Setter
@NoArgsConstructor
public class Membro {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@CPF
@Column(name = "cpf", unique = true, nullable = false, length = 14)
private String cpf;
private String nome;
private Integer idade;
private LocalDate dataDeNascimento;
private Genero sexo;
private String email;
private Integer senha;
private Boolean ativo;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Endereco endereco;
@OneToOne(fetch = FetchType.LAZY,mappedBy = "membro")
private ContaMembro contaMembro;
public Membro(String nome, String cpf, LocalDate dataDeNascimento, Genero sexo, Integer senha, String email) {
this.nome = nome;
this.cpf = cpf;
this.dataDeNascimento = dataDeNascimento;
this.sexo = sexo;
this.senha = senha;
this.email = email;
this.ativo = true;
}
Classe Endereco:
@Entity
@Table(name = "tb_enderecos")
@Getter
@Setter
@NoArgsConstructor
public class Endereco {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String rua;
private Integer numero;
private String bairro;
private String cidade;
private Estado estado;
public Endereco(String rua, Integer numero, String bairro, String cidade, Estado estado) {
this.rua = rua;
this.numero = numero;
this.bairro = bairro;
this.cidade = cidade;
this.estado = estado;
}
Classe EnderecoService:
@Service
public class EnderecoService {
@Autowired
private EnderecoRepository repository;
@Transactional
public void salvarEndereco(Endereco endereco) {
repository.save(endereco);
}
public Optional<Endereco> listarEnderecoPorID(Long id) {
return repository.findById(id);
}
}
Classe MembroService:
@Service
public class MembroService {
@Autowired
private MembroRepository repository;
@Autowired
private List<IValidar<Membro>> validador;
@Transactional
public void salvarMembro(Membro membro) {
calcularIdade(membro);
validador.forEach(v -> v.validar(membro));
repository.save(membro);
}
private void calcularIdade(Membro membro) {
LocalDate dataDeNasc = membro.getDataDeNascimento();
LocalDate dataAtual = LocalDate.now();
Integer idade = (int) ChronoUnit.YEARS.between(dataDeNasc, dataAtual);
membro.setIdade(idade);
}
}