Duvida com Cascade.Persist

Boa Noite Amigos, estou estudando um pouco de cascade e uma coisa nao consigo entender…
tipo eu tenho um usuario com 1 lista de permissões, neste usuário eu tenho ja 2 permissões cadastradas, quando faço isso…

Permissao p = new Permissao("cadastrar");
usuario.getPermissoes().add(p);
session.update(p);
tx.commit();
session.close();

Gostaria de saber por que ele primeiro remove, a duas permissões que ele tinha e depois insere novamente.
O Resultado da transação


Hibernate: 
    select
        permissao_seq.nextval 
    from
        dual
Hibernate: 
    insert 
    into
        Permissao
        (nome, id) 
    values
        (?, ?)
Hibernate: 
    delete 
    from
        r_usuario_permissao 
    where
        usuario_id=?
Hibernate: 
    insert 
    into
        r_usuario_permissao
        (usuario_id, permissao_id) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        r_usuario_permissao
        (usuario_id, permissao_id) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        r_usuario_permissao
        (usuario_id, permissao_id) 
    values
        (?, ?)

Alguem pode me explicar o por que? e tem como nao deletar e inserir novamente?

Obrigado, :smiley:

Alguém consegue m ajudar por favor