Questão nº 58
Questão de Desenvolvimento de Sistemas · FCC TRT24 2016 (nº 58)
Considere o método a seguir, retirado de uma classe Java que utiliza JPA, implementada em condições ideais.
```java
public List consultar(String n) {
x = Persistence.createEntityManagerFactory("conectarPU");
y = x.createEntityManager();
z = y.getTransaction();
z.begin();
Query q = y.createQuery("SELECT f FROM Funcionario f WHERE f.nomefuncionario LIKE :nome");
q.setParameter("nome", "%" + n + "%");
List lista = q.getResultList();
x.close();
return lista;
}
```
As variáveis `x`, `y` e `z` são, respectivamente, dos tipos
- A`Connection`, `Statement` e `Transaction`, que são interfaces do pacote `java.sql.jpa`.
- B`EntityManagerFactory`, `EntityManager` e `EntityTransaction`, que são interfaces do pacote `javax.persistence`. (alternativa correta)
- C`PersistenceUnit`, `EntityManager` e `Transaction`, que são interfaces do pacote `java.sql.jpa`.
- D`ManagerFactory`, `Manager` e `Transaction`, que são interfaces do pacote `javax.sql.persistence`.
- E`Factory`, `Manager` e `Transaction`, que são interfaces do pacote `java.persistence.jpa`.
Resposta comentada
Gabarito Alternativa B
No JPA (Java Persistence API), o EntityManagerFactory é o ponto de entrada para trabalhar com persistência, criando EntityManagers que gerenciam o ciclo de vida das entidades, e cada EntityManager pode obter uma EntityTransaction para controlar transações no banco de dados.
(A) Incorreta: `Connection` e `Statement` são classes do JDBC (`java.sql`), que é uma API de baixo nível para acesso a banco de dados, não diretamente as interfaces do JPA. O pacote `java.sql.jpa` não existe.
(B) Correta: `x` é um `EntityManagerFactory` (fábrica de `EntityManager`s), `y` é um `EntityManager` (gerenciador de entidades) e `z` é uma `EntityTransaction` (gerenciador de transações). Todas essas interfaces pertencem ao pacote `javax.persistence` (ou `jakarta.persistence` em versões mais novas do Java EE/Jakarta EE).
(C) Incorreta: `PersistenceUnit` é um conceito de configuração, não o tipo retornado por `createEntityManagerFactory`. O pacote `java.sql.jpa` não existe.
(D) Incorreta: Os nomes das interfaces estão incorretos (`ManagerFactory` em vez de `EntityManagerFactory`, `Manager` em vez de `EntityManager`). O pacote `javax.sql.persistence` também está incorreto, o correto é `javax.persistence`. Armadilha: Esta alternativa tenta confundir com nomes parecidos e um pacote que mistura `javax.sql` (JDBC) com `persistence`, mas o pacote correto para JPA é `javax.persistence`.
(E) Incorreta: Os nomes das interfaces estão incorretos (`Factory`, `Manager`). O pacote `java.persistence.jpa` não existe.
Fonte: FCC TRT24 2016 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.