Merge no JPA

9 respostas
J

To tendo problemas ao usar o metodo merge no JPA. Quando tenho um relacionamento one-many ou many-many quando adiciona um objeto na coleção de uma das classe o merge adiciona na tabela o resgistro normalmente, mas no caso de remoção de um dos items da coleção o merge não remove na tabela do banco. Gostaria da ajuda de vocês.

9 Respostas

rafaelglauber

Quando você fala “problemas” significa exceção, ou o quê? Dê mais informações que possam nos ajudar a te ajudar, ok? Tipo, trechos de códigos (usando as tags do JForum) que supostamente você acha que podem está errados, como anotou a classe que está com problemas, se gerou execeção pode colocar ela ai para nós vermos, essas coisas…

J

Nenhuma exceção e gerada.

J
@Entity
public class Usuario implements Serializable {

    @Id
    private String usuario;
    private String senha;
    private String nome;
    private String email;
    @Lob
    private byte[] foto;
    @ManyToMany(mappedBy = "usuarioCollection", cascade = CascadeType.MERGE)
    private Collection<Grupo> grupoCollection;

   //get, set e outros metodos

}

@Entity
public class Grupo implements Serializable {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;
    private String descricao;
    @JoinTable(name = "USUARIO_GRUPO", joinColumns = {@JoinColumn(name = "GRUPO", referencedColumnName = "ID")}, inverseJoinColumns = {@JoinColumn(name = "USUARIO", referencedColumnName = "USUARIO")})
    @ManyToMany (cascade=CascadeType.ALL)
    private Collection<Usuario> usuarioCollection;
  
  //gets, sets e outros metodos

}

Após remover um grupo de um usuario executo o seguinte codigo:

entityManager.getTransaction().begin();
entityManager.merge(usuario);
getTransaction().commit();

Mesmo após o codigo acima no banco nada acontece e ao examinar o log não encontro nenhuma instrução de delete. Mas o mesmo codigo citado acima quando adiciono um novo grupo ao usuário modifica o banco inserindo um novo registro na tabela com o relacionamento e no log consigo ver que ele gera um insert.

Tow usando o toplink.

J

foi mal o , na proxima acerto.

M

Opa, beleza!!É só editar o seu código, e ao invés de colocar “<>” coloque “[]”! :smiley: !
Você quer atualizar com o merge?

J

exato

L

Não confia em merge não. E eu te digo uma coisa: MERGE não é UPDATE!

Quando você quer atualizar algo é só pegar um objeto gerenciado pelo container JPA, e alterar suas propriedades com os setters. Quando der um commit, as alterações terão sido enviadas à base de dados.

J

Leonardo3001:
Não confia em merge não. E eu te digo uma coisa: MERGE não é UPDATE!

Quando você quer atualizar algo é só pegar um objeto gerenciado pelo container JPA, e alterar suas propriedades com os setters. Quando der um commit, as alterações terão sido enviadas à base de dados.

Eu sei que o merge não é update, do mesmo jeito que persist não é insert. O merge torna uma entidade desacoplada em gerencialvel e faz com que as diferenças sejam alteradas no banco. Só que quando removo de minha entidade um objeto que está em uma coleção não acontece nada no banco.

J

Acredito que meu problema seja parecido com este:

http://www.javafree.org/javabb/viewtopic.jbb?t=865532

Criado 26 de novembro de 2007
Ultima resposta 29 de nov. de 2007
Respostas 9
Participantes 4