Estou tomando este erro ao executar o literAlura. https://github.com/rthoaldo/literalura
Olá Rafael.
Tudo bem?
Pelo que vi na imagem, você está recebendo um erro de DataIntegrityViolationException
devido a uma chave duplicada no banco de dados. O erro específico é que a chave title
com o valor "Moby Dick; Or, The Whale" já existe e não pode ser inserida novamente.
Esse tipo de erro ocorre quando você tenta inserir um registro com um valor em uma coluna que deve ser única, mas esse valor já existe no banco de dados.
Aqui estão algumas sugestões para resolver esse problema:
Verificar se o registro já existe antes de inserir: Antes de tentar inserir um novo livro, verifique se um livro com o mesmo título já existe no banco de dados. Se existir, você pode optar por atualizar o registro existente ou simplesmente ignorar a inserção.
@Autowired
private LivroRepository livroRepository;
public void saveLivro(Livro livro) {
Optional<Livro> existingLivro = livroRepository.findByTitle(livro.getTitle());
if (existingLivro.isPresent()) {
// Atualizar o livro existente ou lançar uma exceção personalizada
// livroRepository.save(existingLivro.get());
throw new DuplicateKeyException("Livro com este título já existe");
} else {
livroRepository.save(livro);
}
}
Tratar a exceção:
Você pode tratar a exceção DataIntegrityViolationException
para fornecer uma mensagem de erro mais amigável ao usuário.
@Service
public class LivroService {
@Autowired
private LivroRepository livroRepository;
public void saveLivro(Livro livro) {
try {
livroRepository.save(livro);
} catch (DataIntegrityViolationException e) {
throw new DuplicateKeyException("Livro com este título já existe", e);
}
}
}
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.