Validar foreign key

Como faço para saber se determinado registro já foi vinculado à outra tabela antes de removê-lo?

A idéia é que, caso um ID_PRODUTO, por exemplo, esteja vinculado à um ITEM_VENDA, eu não consiga remover o produto em questão. Preciso validar isto para retornar uma mensagem amigável para o usuário.

PS: Não consegui tratar a ConstraintViolationException retornada nesses casos. Se conseguisse, não precisaria desta consulta antes de remover.

Há uma chave estrangeira nas venda ligando ITEM_VENDA com ID_PRODUTO? Esse seria o primeiro passo, acredito.

Você pode tentar também capturar uma exceção de nível mais alto ou diferente (como PersistenceException ou SQLException) e tentar definir qual foi o problema pela mensagem. Veja : https://cursos.alura.com.br/forum/topico-tratamento-de-exce-ccedil-atilde-o-constraintviolationexception-vs-persistenceexception-24414

Outra opção seria realizar uma consulta nas vendas antes da exclusão, para não excluir caso haja uma venda para esse item.

Abraço.

@TerraSkilll boa tarde. Obrigada pela resposta!

Pois então, tentei capturar várias exceções de nível mais alto. PersistenceException foi uma delas. De qualquer forma, não consegui capturar nenhuma delas.

@Override
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public void remover(Long id) {
    try {
        T entity = manager.getReference(classe, id);
        manager.remove(entity);
    } catch (ConstraintViolationException e) {
        System.out.println(e.getMessage());
    } catch (JDBCException e) {
        System.out.println(e.getMessage());
    } catch (HibernateException e) {
        System.out.println(e.getMessage());
    } catch (PersistenceException e) {
        System.out.println(e.getMessage());
    } catch (RuntimeException e) {
        System.out.println(e.getMessage());
    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
 }

Estou utilizando MySQL. Tentei usar esta consulta (que encontrei em alguns fóruns) mas nada feito até agora.

SELECT * FROM `vendinha`.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'produto' AND 
REFERENCED_COLUMN_NAME = 'produto_id'; 

Obs: As tabelas (e entidades) estão mapeadas corretamente. Até por isso, a exceção é lançada quando tento fazer uma remoção “inválida”.