[RESOLVIDO] Problema com relacionamento JPA (Unable to find Entity with id)

Opa, não sou muito de pedir ajuda, mas esse problema que venho enfrentando realmente tem me dado dor de cabeça. Ja achei tópicos parecidos, mas que não resolveram minha situação)

Contexto:
Estou desenvolvendo um projeto de gerenciador de contas e no controller de movimento acabei achando uma grande dor de cabeça na hora de inserir um movimento, e alterar o cartão inserindo este movimento na sua “lista” de movimentos.

Solução:
Basicamente oq fiz, foi remover a linha em que o DAO estava alterando a entidade, pois ela ja fazia isso automaticamente ao chamar o método que atribuia uma compra ao cartão

De forma mais detalhada:
A entidade cartão possui uma lista de movimentos (compras feitas no cartão) que vai ser alterada e acrescida toda vez que um novo movimento com o procedimento de “compraCartao” for inserido. A entidade de movimento, por sua vez, possui um campo do cartão que esta sendo realizada a compra.
Quando realizada a inserção (inclusão do movimento primeiro e depois a alteração do cartão) o programa retorna uma exception, dizendo não ter achado o registro que inseri anteriormente para fazer a relação. Não sei onde esta o problema, ja tentei criar uma thread, inverter a ordem dos processos, ja tentei mexer nas anotações e nada!

Código da entidade Cartão:
package model.entities;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "cartao")
public class Cartao {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "codi_cartao")
	private Long codi;
	@Column(name = "fatu_cartao")
	private Date fatu;
	@Column(name = "nome_cartao")
	private String nome;
	@Column(name = "vali_cartao")
	private Date vali;
	@Column(name = "limi_cartao")
	private Double limite;
	@OneToMany(mappedBy = "cartao")
	private List<Movimento> compras = new ArrayList<>();
	@Column(name = "status_cartao")
	private String status;
	
	
	
	public Cartao() {
		// TODO Auto-generated constructor stub
	}

	
	public Cartao(Date fatu, String nome, Date vali, String status) {
		super();
		this.fatu = fatu;
		this.nome = nome;
		this.vali = vali;
		this.status = status;
	}


	public Date getFatu() {
		return fatu;
	}


	public void setFatu(Date fatu) {
		this.fatu = fatu;
	}


	public String getNome() {
		return nome;
	}


	public void setNome(String nome) {
		this.nome = nome;
	}


	public Date getVali() {
		return vali;
	}


	public void setVali(Date vali) {
		this.vali = vali;
	}
	
	public Double getLimite() {
		return limite;
	}


	public void setLimite(Double limite) {
		this.limite = limite;
	}


	public List<Movimento> getCompras() {
		return compras;
	}


	public void setCompras(List<Movimento> compras) {
		this.compras = compras;
	}
	
	public void setCompra(Movimento compra) {
		if(compra == null) return;
		
		this.compras.add(compra);
	}


	public String getStatus() {
		return status;
	}


	public void setStatus(String status) {
		this.status = status;
	}
	
	public Double getTotalCompras() {
		Double valor = 0.0;
		for (Movimento m : getComprasAbertas()) {
			valor += m.getValor();
		}
		return valor == null? 0.0 : valor;
	}
	
	public List<Movimento> getComprasAbertas(){
		List<Movimento> abertas = new ArrayList<Movimento>();
		for (Movimento m : compras) {
			if(m.getParc() > m.getPagas()) {
				abertas.add(m);
			}
		}
		return abertas;
	}


	@Override
	public String toString() {
		return this.nome;
	}
	
}

Código da entidade Movimento:
package model.entities;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import model.enums.TiposCate;

@Entity
@Table(name = "movimentos")
public class Movimento {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "codi_movi")
	private Long codi;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_movi")
	private Date data;
	@Column(name = "desc_movi")
	private String desc;
	@Column(name = "cate_movi")
	private TiposCate cate;
	@ManyToOne
	private Cartao cartao;
	@OneToOne
	private Conta conta;
	@Column(name = "parc_movi")
	private Integer parc;
	@Column(name = "parc_pagas_movi")
	private Integer pagas;
	@Column(name = "valor_parc_movi")
	private Double valor;
	@Column(name = "proce_movi")
	private String proce;
	
	public Movimento() {
		// TODO Auto-generated constructor stub
	}
	
	


	
	public Long getCodi() {
		return codi;
	}


	public Cartao getCartao() {
		return cartao;
	}


	public void setCartao(Cartao cartao) {
		this.cartao = cartao;
	}


	public Date getData() {
		return data;
	}


	public void setData(Date data) {
		this.data = data;
	}

	public String getDesc() {
		return desc;
	}


	public void setDesc(String desc) {
		this.desc = desc;
	}


	public TiposCate getCate() {
		return cate;
	}


	public void setCate(TiposCate cate) {
		this.cate = cate;
	}


	public Conta getConta() {
		return conta;
	}


	public void setConta(Conta conta) {
		this.conta = conta;
	}

	
	public Integer getParc() {
		return parc;
	}

	
	public void setParc(Integer parc) {
		this.parc = parc;
	}

	
	public Integer getPagas() {
		return pagas;
	}



	public void setPagas(Integer pagas) {
		this.pagas = pagas;
	}



	public Double getValor() {
		return valor;
	}


	public void setValor(Double valor) {
		this.valor = valor;
	}
	
	
	
	public String getProce() {
		return proce;
	}



	public void setProce(String proce) {
		this.proce = proce;
	}



	public Double getValorAju() {
		if(cate.getIndice() == 0) {
			return valor * -1;
		} 
		return valor;
	}


	public Double getTotal() {
		return valor * parc;
	}
	
	
	public Double getRestante() {
		return (valor * parc) - (valor * pagas);
	}



	@Override
	public String toString() {
		return this.desc;
	}
	
}

Exceção gerada:
> Caused by: javax.persistence.EntityNotFoundException: Unable to find model.entities.Movimento with id 1

    	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:163)
    	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:216)
    	at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:332)
    	at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)
    	at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)
    	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:113)
    	at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1184)
    	at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1049)
    	at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:697)
    	at org.hibernate.type.EntityType.resolve(EntityType.java:464)
    	at org.hibernate.type.ManyToOneType.resolve(ManyToOneType.java:240)
    	at org.hibernate.type.EntityType.resolve(EntityType.java:457)
    	at org.hibernate.type.EntityType.replace(EntityType.java:358)
    	at org.hibernate.type.CollectionType.replaceElements(CollectionType.java:587)
    	at org.hibernate.type.CollectionType.replace(CollectionType.java:750)
    	at org.hibernate.type.TypeHelper.replace(TypeHelper.java:167)
    	at org.hibernate.event.internal.DefaultMergeEventListener.copyValues(DefaultMergeEventListener.java:451)
    	at org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:205)
    	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:178)
    	at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:70)
    	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102)
    	at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:791)
    	at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:778)
    	at model.DAO.alterar(DAO.java:71)
    	at model.DAO.alterarAgora(DAO.java:76)
    	at controller.MoviController.salvar(MoviController.java:320)

Agradeço desde já a atenção

posta o codigo da classe que tem a compraCartao, além das classe que ela chamar.

Se é aqui que estão os problemas, mostra o código desses dao.consultarUm e daoCar.alterarAgora

Solução:
Basicamente oq fiz, foi remover a linha em que o DAO estava alterando a entidade, pois ela ja fazia isso automaticamente ao chamar o método que atribuia uma compra ao cartão