3
respostas

Java API: Tratamento de dados

Pessoal, boa noite.

Estou construindo uma API em Java, utilizando Spring e Hibernate. Minha situação é a seguinte:

Tenho uma tabela com 3 foreign keys, many to one, as quais podem receber um valor null. O problema é o seguinte:

Quando eu vou salvar algum dado nessa tabela e envio um id de valor nulo pra minha API, tenho uma dúvida de como trata-lôs... Pois, na minha model, eu sempre tenho que setar uma instância da model da foreign key, certo? Ex: Releases -> Users

A tabela releases possui um user_id, então, eu tenho na minha model Release, eu tenho um "private User user;" e devo fazer um setUser, caso eu queira salvar a foreign key, então, quando eu for salvar um release, eu devo antes, pesquisar seu registro no banco, certo? Ex: User user = userRepository.findById(getUserId()).get(); release.setUser(user);

Mas e caso o user_id venha nulo da minha API? como eu procedo quanto a isso? pois, caso venha nulo, vai dar um erro na função findById. Teria eu, que encher o código de ifs verificando se o valor está vazio antes de salva-lô? acho que não seria o ideal... Pensei que meu front poderia enviar um valor 0 caso o user_id tivesse que ser nulo, dai ele não pesquisaria um registro, mas daria um problema na função get() ao tentar encontra-lô.

Então minha dúvida é a seguinte, qual a melhor forma de tratar uma foreign key que possa ser vazia e possa vir com um valor nulo numa api Java?

Agradeço desde já.

3 respostas

Então, eu teria que fazer situações como essa para validar o ID toda vez? Utilizando a exception genérica, não precisaria me preocupar também caso o id venha nulo

@Service
public class CreditCardService 
{
    @Autowired
    private CreditCardRepository creditCardRepository;

    public CreditCard findById(Integer id)
    {
        try {
            return creditCardRepository.findById(id).get();
        } catch (Exception e) {
            return null;
        }     
    }
}

Segue abaixo também o serviço que estou utilizando para conversão dos dados para a model:

@Service
public class ConvertService 
{
    @Autowired
    private CreditCardService creditCardService;

    /**
     * Convert data to release model type
     * 
     * @return Release
     */
    public Release convert(CreateReleaseValidator data)
    {
        Release release = new Release();

        release.setDescription(data.getDescription())
            .setStatus(data.getStatus())
            .setType(data.getType())
            .setValue(data.getValue())
            .setCreditCard(creditCardService.findById(data.getCreditCardId()));

        return release;
    }
}

Olá Marcio, tudo bem?

Uma abordagem para tratar a foreign key que pode ser vazia ou nula em uma API Java é usar a lógica condicional para verificar se o valor é nulo antes de realizar a operação de pesquisa no banco de dados

Integer userId = getUserId();
User user = null;
if (userId != null) {
    user = userRepository.findById(userId).orElse(null);
}
release.setUser(user);

Dessa forma, se o ID for nulo, a instância da model da foreign key será atribuída como nula. Caso contrário, a pesquisa será realizada normalmente.