[RESOLVIDO] Detached Class. Inserir um objeto e alterar outro objeto em uma transação

Boa noite a todos,
Estou realizado um cadastro de uma movimentação e ao realizar essa movimentação a quantidade do produto deve ser alterada. A questão é que a movimentação ainda não existe e o produto já existe. Ou seja, na minha transação ao realizar o método .persist ele deve inserir a movimentação e realizar um update no produto.

MAS, quando eu é executado apresenta esse erro: detached entity passed to persist: cgas.models.Produto

O código é o seguinte:

@Entity
public class Movimentacao implements Serializable {
 
	@Id
	private Date data;
	 
	private double valor;
	 
	private int quantidade;
	@Id
	@ManyToOne 
	private Funcionario funcionario;
	@ManyToOne
	private Evento evento;
	@ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST}) 
	private Produto produto;

[code]
@ManagedBean(name=“daoMovimentacao”)
@SessionScoped
public class MovimentacaoDAO implements Serializable {

@ManagedProperty(value="#{connectionFactory.entityManager}")
private EntityManager entityManager;

public MovimentacaoDAO() {
	System.out.println("CRIANDO MovimentacaoDAO - @SessionScoped");
}

public void salvar(Movimentacao obj) {
entityManager.getTransaction().begin();
if(obj.getProduto() != null)
{
Produto produto = obj.getProduto();
int quantidade = produto.getQuantidade();
if(obj.getEvento().getAcaoProduto().equals(Acao.SOMAR.toString()))
quantidade += obj.getQuantidade();
else if(obj.getEvento().getAcaoProduto().equals(Acao.SUBTRAIR.toString()))
quantidade -= obj.getQuantidade();
produto.setQuantidade(quantidade);
obj.setProduto(produto);
}
entityManager.persist(obj);
entityManager.getTransaction().commit();
}[/code]

Grande abraço.

Ja tentou atualizar o produto primeiro de depois salvar a movimentação ?

ao inves de

tenta usar o

Bom só uma dica, vc pode consultar o produto (do banco) para mudar o estado dele.

Então, funcionou quando eu troquei para merge

entityManager.merge(obj);

Mas eu tive que mudar a classe de movimentação e tirar o funcionário de PK.


public class Movimentacao implements Serializable {  
  
    @Id  
    private Date data;  
       
    private double valor;  
       
    private int quantidade;  

    @ManyToOne   
    private Funcionario funcionario;  
    @ManyToOne  
    private Evento evento;  
    @ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})   
    private Produto produto;  

Considero como resolvido.
Agradeço a todos.