Conexões no Hibernate

Pessoal estou estudando Hibernate/JPA e ai pintou algumas duvidas.
Qual a melhor tipo Boas praticas para criar conexão com o Bando usando Hibernate?

public class HibernateUtil {

	private static Logger logger = Logger.getLogger(HibernateUtil.class);
	private static SessionFactory factory;
	
	static {
		Configuration configuration = new Configuration();
		configuration.configure();
		factory = configuration.buildSessionFactory();
	}
	
	public static Session getSessionFactory() {
		logger.info("Abrindo a Session");
		return factory.openSession();
	}
}

OU

public class PersistenceFactory {

	private static EntityManagerFactory entityManagerFactory;

	private static final String PERSISTENCEUNITNAME = "persistenceJPA";

	public static EntityManagerFactory getEntityManagerFactory() {
		if (entityManagerFactory == null) {
			synchronized (PersistenceFactory.class) {
				if (entityManagerFactory == null) {
					try {
						entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCEUNITNAME);
					} catch (RuntimeException ex) {
						throw ex;
					}
				}
			}
		}
		return entityManagerFactory;
	}

Quais da duas é forma mas correta e mas util.
Notei que para o segundo caso, “não sei se estou fazendo algo errado”, mas esta demorando muito para criar a conexão,
desde ja muito obrigado.