Hibernate update na chave composta

2 respostas
homisinho

Olá a todos,
estou com um problema aqui, tenho uma classe que possui uma chave composta utilizando @EmbeddedId.
Mas preciso dar um update em um campo que compoem a chave. Já tentei de várias formas, mas não cheguei a lugar nenhum.

try {
            daopendulos.beginTransaction();
            Pendulos pendmuda = modelo.getPend(gridpendulos.getSelectedRow());
            pendmuda.setPendulosPK(new PendulosPK(unidade.getCodunidade(), pendmuda.getPendulosPK().getPendulo() + 1));
            daopendulos.Merge(pendmuda);
            daopendulos.commitTransaction();
        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(IFrmCriaArm.class.getName()).log(Level.SEVERE, null, ex);
        }

Esse é um teste que eu fiz, mas já fiz vários outros…nesse estou alterando somente um objeto, na realidade vou fazes isso com uma lista de objetos…

org.hibernate.HibernateException: identifier of an instance of br.com.widitec.modelos.Pendulos was altered from br.com.widitec.modelos.PendulosPK[codunidade=36, pendulo=3] to br.com.widitec.modelos.PendulosPK[codunidade=36, pendulo=4]

Não quero excluir e inserir novamente.
Qualquer ajuda é bem vinda.

Obrigado.

2 Respostas

P

eu acho que não dá pra fazer update em chave pelo hibernate. acho.

abraços.

homisinho

[modo lamentação]
Realmente o hibernate é um ótimo ORM mas eu estou meio cansado de passar o dia procurando como criar critérias ou como otimizar os sqls gerados por ele e blablablabla…

Cada dia o desenvolvimento para em uma coisa diferente!
Acho que vou voltar a criar meus métodos com sql que a coisa vai andar mais rápido
[/modo lamentação]

Bom pra n deixar o tópico no ar, resolvi criar uma SQL coisa q n demorou 2 minutos:

public int atualChavePend(PendulosPK id, PendulosPK novo){
       Query query = session.createSQLQuery("update pendulos set pendulo = ?, codunidade=? where codunidade = ? and pendulo = ?").
               setInteger(0, novo.getPendulo()).
               setInteger(1, novo.getCodunidade()).
               setInteger(2, id.getCodunidade()).
               setInteger(3, id.getPendulo());
       return query.executeUpdate();
    }

Depois de dar update nos objetos será necessário buscar todos os objetos interligados com eles no banco novamente!

Creio q esse seja meu segundo e último sistema utilizando o hibernate.

Criado 11 de fevereiro de 2009
Ultima resposta 11 de fev. de 2009
Respostas 2
Participantes 2