[Resolvido] - Error ao Persistir Lista

Estou com o seguinte cenário: o usuário deleta um registro da lista e depois ele tenta inserir o mesmo objeto na lista e ai recebo um erro de Unique Constraint, pois o entityManager faz um insert primeiro do delete.

Alguém já passou por este problema?

Desde já agradeço a ajuda de todos.

nao da pra dar um flush() depois do delete?

[quote=mauricioadl]nao da pra dar um flush() depois do delete?[/quote]Ou fazer as operações em transações separadas.

Não, é requisito do sistema fazer tudo de uma vez só, pois dizem que o cliente pode abandonar a tela antes de salvar e o banco ficar com registros “sujos”.

[quote=Jedi_FeniX]Não, é requisito do sistema fazer tudo de uma vez só, pois dizem que o cliente pode abandonar a tela antes de salvar e o banco ficar com registros “sujos”.[/quote]Oi?
Ele pode na mesma chamada fazer as duas coisas… O.o

public void fazAlgo(){ apagaOsTrens(lista); // transação nova begin+commit criaOsTrens(lista); // transação nova begin+commit }
A não ser que você esteja utilizando open session in view para controle de transação, aí só o flush nesse caso();.

Não sei se o JPA trataria como nested transaction ao tentar abrir uma nova transação em uma já existente.

Vamos lá existe a seguinte estrutura:

Objeto Pai:

[code]
public class Pai{

@OneToMany(fetch = FetchType.EAGER, mappedBy = “pai”, cascade = CascadeType.ALL, orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
private List filhos;

}[/code]

Objeto Filho:

[code]
public class Filho {

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = “Filho_do_filho_id”, nullable = false)
private FilhoDoFilho filhoDoFilho;

}[/code]

O usuário na view pode tirar o relacionamento filhoDoFilho com a entidade filho, e quando ele clicar em salvar o objeto pai será persistido, pois o mesmo está na sessão.

Sim, estou usando open session in view.

O problema só ocorre quando o usuário tenta inserir o mesmo objeto dentro da mesma transação, quando são objetos novos ou objetos removidos entityManager trabalhar tranquilamente com os inserts e deletes.

Tentei detalhar um pouco mais o cenário para ajudar… não sei se ficou bom…

Eu estou desde manhã procurando uma solução para esta questão e desde que me deparei com este erro tenho na cabeça que isso é um problema de modelagem e confirmei com alguns links que estão pela internet, segue um deles, aonde eles falam que este cenário é relacionado a um objeto reencarnado:

http://en.wikibooks.org/wiki/Java_Persistence/Persisting#Reincarnation

Muito Obrigado pela ajuda, mas acho que não tenho muitas alternativas neste cenário.