diferentes maneiras de obter o EntityManager

O idioma usual que vejo para criar o EntityManager é algo assim:

public class BaseDao {

private static final String PERSISTENCE_UNIT_NAME = "Employee";
EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);

public EntityManager getEntityManager() {
      return factory.createEntityManager();
    } 
}

então é usado assim:

Employee emp = new Employee();
emp.setName("Joe M");
getEntityManager().persist(emp);

A questão é por que não fazer assim:

public class BaseDao{
    private static final String PERSISTENCE_UNIT_NAME = "Employee";
    EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
    private EntityManager entityManager = null;


public void setEntityManger() {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
    this.entityManager = factory.createEntityManager();

    }

    public EntityManager getEntityManager() {
        return this.entityManager;
    }
}

Em outras palavras, existe a necessidade de sempre obter o gerenciador de entidades através de factory.createEntityManager ()? ou pode ser criado como uma variável de instância (ou mesmo estática) e recuperado assim?

Para esclarecer, estou falando de um ambiente que não usa contêineres EJB ou Spring.

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion