Campo Unique - não validando

Pessoal,
tô com o seguinte problema.
Tenho uma tabela que tem apenas dois campos : Id e Nome.
O Id não é autoincrement, ele é preenchido pelo usuário, junto com o nome.

Supondo que já tem no banco de dados um registro com Id 2 e nome X, e um com Id 3 e nome Y. Na tela, mostra os 2, podendo ser editados. O usuário edita o com Id 3, colocando Id 2, e clica pra fazer o update.
Se fizer esse update direto no Banco de Dados, é mostrado o erro de Unique Constraint Violated. Só que pela aplicação, não dá o erro, e ele faz o update, mudando o Nome do registro que tá com Id 2 pra Y (que era o nome que tava no 3).

O código que faz update é esse:

protected void update(T obj) throws DataAccessException {
        try {
            EntityManager em = getEntityManager();
            em.merge(obj);
            em.flush();
        } catch (Exception e) {
            throw new DataAccessException(e);
        } finally {
            close();
        }
    }

Fazendo o debug, ele não dá nenhuma exceção.

Minha pergunta é: teria como fazer uma comparação pra ver se o objeto que está dando update é o com mesmo Id do Banco de dados? Ou, pq não está lançando a exceção pela aplicação?

A aplicação está se comportando corretamente, o que você falou do banco é que não faz sentido.

Repare que no exemplo que você citou para o banco, quando você tenta mudar o id do registro de 3 para 2 você recebe o erro porque já existe um id 2.

Na aplicação o que acontece é diferente, se você passa para o EntityManager um objeto que você alterou o id, não é id que será atualizado. A aplicação vai considerar que o objeto informado é o de id 2, que você alterou esperando mudar o id da entidade, mas ao contrário de atualizar o id, vai atualizar todos os demais campos do objeto (de id 2) no banco.

Blz? Flw! :thumbup: