Eu estou fazendo um projeto meu para testar meus conhecimentos, e nesse caso estou fazendo com 3 entidades sendo UserDetails, e estou usando permissão com o HasRole, quando eu faço a autorização com token funciona com as 3 entidades. ao fazer uma consulta com o usuario logado de motorista por causa da entidade Responsavel Estar com Eager em perfils, ele joga uma exception de No value is Present, Por causa do Optional, , tentei trocar de Eager para Lazy no relacionamento ManyToMany mas me devolve uma lazy exception, Estou pensando em fazer Um Join fetch mas queria saber se tem outra opção.
resumo: ao Fazer um endpoint com usuario Logado a Outra entidade gera problema, mas se estou logado na entidade que está com o EAGER ela funciona normalmente, espero que tenha entendido kkk vou mandar o codigo aqui
estou usando Lombok
public class Motorista implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String cpf;
private String cnh;
private String telefone;
private Date dataDeNascimento;
private String senha;
private String email;
@ManyToMany
private List<Perfil> perfils = new ArrayList<>();
@OneToMany(mappedBy = "motorista", fetch = FetchType.LAZY)
private List<Automovel> automovel = new ArrayList<>();
@JsonIgnore
@OneToOne(fetch = FetchType.LAZY)
private ContaSalario contaSalario;
@JsonIgnore
@ManyToMany
private List<ParceiroMotorista> parceiroMotorista = new ArrayList<>();
@OneToMany(mappedBy = "motorista", fetch = FetchType.LAZY)
private List<Responsavel> responsavel = new ArrayList<>();
public Motorista(String nome, String cpf, String cnh, String telefone, Date dataDeNascimento, String senha, String email) {
this.nome = nome;
this.cpf = cpf;
this.cnh = cnh;
this.telefone = telefone;
this.dataDeNascimento = dataDeNascimento;
this.senha = senha;
this.email = email;
}
public Motorista() {
}
public Motorista(String nome, String telefone, Date dataDeNascimento, List<ParceiroMotorista> parceiroMotorista) {
this.nome = nome;
this.telefone = telefone;
this.dataDeNascimento = dataDeNascimento;
this.parceiroMotorista = parceiroMotorista;
}
public void adicionarAutomovel(Automovel automovel) {
automovel.setMotorista(this);
this.automovel.add(automovel);
}
public void adicionar(ParceiroMotorista parceiroMotorista) {
List<Motorista> motorista = new ArrayList<>();
parceiroMotorista.setMotorista(motorista);
this.parceiroMotorista.add(parceiroMotorista); //adiciona na tabela do relacionamento many to many
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return perfils;
}
@Override
public String getPassword() {
return senha;
}
@Override
public String getUsername() {
return email;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}