Hibernate - Executando um update ou insert em um ArrayList [RESOLVIDO]

5 respostas
A

Boa noite!

Estou tentando fazer um update ou insert em um ArrayList. 
Estou utilizando JSF e em um <rich:dataTable eu carrego uma lista persistente, então eu insiro uma linha nova (realmente insiro uma linha no List) e mando fazer um update  a seguinte mensagem de erro:

18:40:19,300 INFO [DefaultLoadEventListener] Error performing load command
org.hibernate.ObjectNotFoundException: No row with the given identifier exists

Se precisar de mais detalhes para responder a dúvida, por favor me avise.

5 Respostas

mgarcia

Se vc tentar fazer um update em um registro que ainda não existe no banco de dados, ele realmente irá apontar este problema.

Em linhas novas, vc obrigatoriamente precisaria dar um save no objeto, ou se utilizar do saveOrUpdate do hibernate

A

Obrigado mgarcia,

Mas veja se pode me ajudar, se eu tenho uma lista e desejo acrescentar uma nova linha nela, como devo proceder? Não posso re-inserir a lista inteira no banco, pois se eu der um save vai dizer que  existe registro no banco, e na verdade eu somente quero incluir um novo registro na linha com algo como lista.add(registro) e depois fazer um save ou um update, ou seja:

List sapatos = new ArrayList();

Sapato sapato = new Sapato();
sapato.setMarca(“Nike”);

sapatos.add(sapato);

Hibernate…
session.save(sapatos);

E depois pego a mesma lista do banco e adiciono uma nova entrada e tento fazer um update, mas a lista já contém informações, então eu só inseri uma nova informação e desejo salvar a lista novamente no banco com uma nova linha. Como devo fazer?

Espero que o exemplo que eu dei esteja correto.

Grato. :slight_smile:

mgarcia

opa… desculpe a demora…
o hibernate consegue identificar se um objeto existe ou nao no banco…
como disse antes, ao inves de utilizar o método save, utilize o método saveOrUpdate

A

Bom dia, muito obrigado pela ajuda.
Eu utilizei na entity o CascadeType.MERGE, CascadeType.FLUSH e no DAO eu utilizei merge() ao invés de save e funcionou!
Muito obrigado pela ajuda.

lelodois

abmaelr.sergio:
Bom dia, muito obrigado pela ajuda.
Eu utilizei na entity o CascadeType.MERGE, CascadeType.FLUSH e no DAO eu utilizei merge() ao invés de save e funcionou!
Muito obrigado pela ajuda.

Coloca como resolvido

[RESOLVIDO] na frente do título

Criado 4 de agosto de 2010
Ultima resposta 9 de ago. de 2010
Respostas 5
Participantes 3