Dúvida sobre método listar JPA

Olá pessoal, estou estudando o método de listar com JPA e não estou entendendo uma certa parte do método. Gostaria que alguém me explicasse essa parte que não entendi.

public List<Locacao> listar() {
	EntityTransaction transacao = null;
	EntityManagerFactory entityManagerFactory = null;
	EntityManager entityManager = null;
	try {
		entityManagerFactory = Persistence.createEntityManagerFactory("locadorapersistencia");
		entityManager = entityManagerFactory.createEntityManager();

		CriteriaBuilder cb = entityManager.getCriteriaBuilder();
		CriteriaQuery<Locacao> cq = cb.createQuery(Locacao.class);
		Root<Locacao> rootEntry = cq.from(Locacao.class);
		CriteriaQuery<Locacao> all = cq.select(rootEntry);

		TypedQuery<Locacao> allQuery = entityManager.createQuery(all);
		return allQuery.getResultList();

	} catch (RuntimeException e) {
		System.out.println("GerericRepository.buscar" + e.toString());
		// TODO: handle exception
		throw e;
	} finally {
		entityManager.close();
		entityManagerFactory.close();
	}
}

Parte que não entendi:

Root<Locacao> rootEntry = cq.from(Locacao.class);
CriteriaQuery<Locacao> all = cq.select(rootEntry);
TypedQuery<Locacao> allQuery = entityManager.createQuery(all);
return allQuery.getResultList();

Isso é criteria, que é uma API responsável por gerar e executar código SQL para realização de consultas baseado nas entidades mapeadas do projeto (é equivalente ao JPQL).

Nesse seu caso, isso é apenas um SELECT * FROM Locacao.

DOCS: https://docs.oracle.com/javaee/7/tutorial/persistence-criteria.htm

1 curtida