Dúvida com métodos do Entity Manager

Olá a todos, tenho um dúvida com relação aos métodos merge() e persist().

Qual a diferença entre usar o merge e o persist?
Estou tentando fazer uma classe padronizada com as pricipais operações de acesso ao banco para depois so extender nas outras classes, nesta classe padrão tenho o método alterar que seria responsável por modificar informações de um objeto no banco.

A minha dúvida é qual é o método correto a se utilizar no entity manager, merge ou insert mesmo.

a classe padrão:

public class PersistPadrao {

	EntityManagerFactory emf= Persistence.createEntityManagerFactory("controleestoque");
	EntityManager em = emf.createEntityManager();
	EntityTransaction etrans = em.getTransaction();


	public void inserir(Object obj) {
		etrans.begin();
		em.persist(obj);
		etrans.commit();

	}

	public void alterar(Object obj) {//minha dúvida é com relação a este método!
		etrans.begin();
		em.merge(obj);//aqui devo usar merge mesmo
		etrans.commit();

	}

Lí a respeito de conceitos como o objeto estar attach ou não mas não consegui entender direito, desculpe a minha ignorância.