Return treated message when it occurs (com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException :)

-1

Hello, good afternoon!

Can someone help me to return a treated message when it occurs ** com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Can not delete or update parent row: a foreign key constraint fails ( loja . produto , CONSTRAINT id FOREIGN KEY ( categoria_id ) REFERENCES categoria ( id )) **?

When trying to delete a category in which I already have an associated product, I want to return the message that the deletion is not possible, but I am not able to perform this treatment.

**Entidade:**

@Table(name = "categoria")
@Entity
public class Categoria implements Serializable {
    /*Attributes*/
    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name = "CATEGORIA_ID", sequenceName = "CATEGORIA_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CATEGORIA_ID")
    private Integer id;
    private String nome;    
    private String ativo;

    /*======================= Associações =======================*/
    /* Uma categoria tem vários produtos */
    @OneToMany(mappedBy = "categoria")
    private List<Produto> produtos = new ArrayList<>();;

    /*===================== Fim Associações =====================*/

**RESOURCE:**
    /*----------------------------------------------------*
     * delete - Categoria
     *----------------------------------------------------*/
    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    public ResponseEntity<Void> delete(@PathVariable Integer id) {
        categoriaService.delete(id);
        return ResponseEntity.noContent().build();
    }


**SERVICE:**

public void delete(Integer id) {
        find_id(id);
        try {
            categoriaRepository.deleteById(id);
        } catch (Exception e) {
            if (e instanceof com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException) {
                throw new DataIntegrityException("Não é possível excluir uma categoria que possui produtos");
            }
        }
    }

Error displaying in Insomimnia or PostMan:

Thanks in advance for your attention!

    
asked by anonymous 08.09.2018 / 19:20

1 answer

0

Dear Alex, you can try the following:

public void delete(Integer id) {
    find_id(id);
    try {
        categoriaRepository.deleteById(id);
        // a próxima linha faz o commit imediato provocando o Exception
        categoriaRepository.flush();
    } catch (org.springframework.dao.DataIntegrityViolationException e) {
        throw new RuntimeException("Não é possível excluir uma categoria que possui produtos");
    }
}
    
11.09.2018 / 03:02