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.