[Resolvido]Problemas Cascade!

8 respostas
Everson_Alcantara

Caros,

Se puderem me ajudar.
Estou com problemas ao fazer inserções e alterações utilizando o Cascade.
tenho as tabelas de perfis, usuários e permissões:
ao inserir um perfil devo associar ao usuário e as permissões.

essa é a exception:

[color=red]Exception in thread “AWT-EventQueue-0” org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [br.com.eletropaulo.sitede.model.bean.permissao.PermissaoBean#0][/color]

Desde já muito obrigado!

Segue abaixo o Bean e o erro:

@Entity
@Table(name = "PERFIL")
@SequenceGenerator(name = "PERFIL_SEQ", sequenceName = "PERFIL_SEQ", allocationSize = 1)
public class PerfilBean implements Serializable, Renderizavel {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PERFIL_SEQ")
    @Column(name="id_perfil")
    private Long id;
    
    @Column(name="nom_perfil")
    private String nome;
    
    @Column(name="dsc_perfil")
    private String descricao;
    
    @Column(name="sts_perfil")
    private boolean status = true;

    @JoinTable(name = "PERFIL_USUARIO", joinColumns = {
        @JoinColumn(name = "ID_PERFIL", referencedColumnName = "ID_PERFIL")}, inverseJoinColumns = {
        @JoinColumn(name = "ID_USUARIO", referencedColumnName = "ID_USUARIO")})
    @ManyToMany
    private List<UsuarioBean> usuarios = new ArrayList<UsuarioBean>();

    @OneToMany(cascade = {CascadeType.ALL, CascadeType.REMOVE})
    @JoinColumn(name = "id_perfil")
    private List<PermissaoBean> permissoes = new ArrayList<PermissaoBean>();
    
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
    
    public String getDescricao() {
        return descricao;
    }
...

8 Respostas

ganondorfan

Um objeto diferente com o mesmo valor do identificador já está associado com a sessão :smiley:

Everson_Alcantara

E você pode me dizer como posso resolver?

Grato!

clunsde

Tente fazer um clear no entityManager.

pdioniziofilho

vulgarmente falando e sem prestar muita atenção no post heeh

entityManager.clear() antes de iniciar o fluxo para salvar o objeto?

:shock: :shock: :shock:

clunsde

pdioniziofilho:
vulgarmente falando e sem prestar muita atenção no post heeh

entityManager.clear() antes de iniciar o fluxo para salvar o objeto?

:shock: :shock: :shock:

jovem, qual a melhor solução?

pdioniziofilho

clunsde:
pdioniziofilho:
vulgarmente falando e sem prestar muita atenção no post heeh

entityManager.clear() antes de iniciar o fluxo para salvar o objeto?

:shock: :shock: :shock:

jovem, qual a melhor solução?

Efebo ( :slight_smile: ) , por favor, não leve meu post como uma ofensa ao seu. No momento que eu postei o meu não tinha visto o seu. Desculpe-me se parece que estou “zuando” o seu topico, mas é que eu não tinha lido muito bem o topico e quis dar uma resposta rápida.

Bem, o que eu acho q tinha que ver é se esse fluxo dele de inserção já não está tentando inserir o objeto 2 vezes, ou então, verificar se o objeto ja não existe no entityManager chamando o metodo contains …

contains(Object entity): Check if the instance belongs to the current persistence context.

:wink: :wink: :wink: :wink: :wink:

clunsde

pdioniziofilho:
clunsde:
pdioniziofilho:
vulgarmente falando e sem prestar muita atenção no post heeh

entityManager.clear() antes de iniciar o fluxo para salvar o objeto?

:shock: :shock: :shock:

jovem, qual a melhor solução?

Efebo ( :slight_smile: ) , por favor, não leve meu post como uma ofensa ao seu. No momento que eu postei o meu não tinha visto o seu. Desculpe-me se parece que estou “zuando” o seu topico, mas é que eu não tinha lido muito bem o topico e quis dar uma resposta rápida.

Bem, o que eu acho q tinha que ver é se esse fluxo dele de inserção já não está tentando inserir o objeto 2 vezes, ou então, verificar se o objeto ja não existe no entityManager chamando o metodo contains …

contains(Object entity): Check if the instance belongs to the current persistence context.

:wink: :wink: :wink: :wink: :wink:

Não levei não, é que realmente eu também não sei. Aconteceu isso comigo, quando no entityManager eu pesquisava algum objeto e tentava inserir um outro objeto. Ele gerava este erro, ou um erro parecido.

por exemplo: O objeto carro, contêm uma roda, eu pesquisa a roda e setava no carro. Só que a hora que eu ia inserir o carro, dava esse pau.

O que eu fiz foi fazer um clear no entitymanager e funcionou. Agora porque, não tive tempo para pesquisar. Por isso gostaria de esclarecer.

Everson_Alcantara

Caros!

Quero agradecer pelo auxílio!!
Acabei deixando de lado a opção de usar o cascade.
Mudei a forma de relacionar os perfis com as permissões.

Grato!

Criado 21 de junho de 2011
Ultima resposta 30 de jun. de 2011
Respostas 8
Participantes 4