Questão nº 24
Questão de Tecnologia da Informação · FCC TRT5 2022 (nº 24)
Atenção: O Modelo Entidade-Relacionamento abaixo deve ser utilizado para responder as questões de números 21 a 25.
Em uma aplicação que utiliza JPA, em condições ideais, a codificação correta que reflete a relação (cardinalidade) entre Departamento e Funcionario expressa no Modelo Entidade-Relacionamento é definida, na classe Departamento.java, por
Este texto de apoio vale também pra questão nº 21, questão nº 22, questão nº 23, questão nº 25.
- A```
@OneToMany(cascade = CascadeType.ALL, mappedBy = "departamento", fetch = FetchType.EAGER)
private List<Funcionario> funcionarioList;
``` (alternativa correta) - B```
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Departamento departamento;
``` - C```
@OneToOne(cascade = CascadeType.ALL, mappedBy = "departamento", fetch = FetchType.LAZY)
private List<Funcionario> funcionarioList;
``` - D```
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private List<Funcionario> funcionarioList;
``` - E```
@OneToMany(cascade = CascadeType.ALL, mappedBy = "funcionario", fetch = FetchType.LAZY)
private Departamento departamento;
```
Resposta comentada
Gabarito Alternativa A
Para mapear relacionamentos em JPA, usamos anotações que indicam a cardinalidade (quantas entidades de um tipo se relacionam com quantas de outro). Em um relacionamento um-para-muitos, uma entidade "pai" (o "um") pode ter várias entidades "filhas" (os "muitos").
A) Correta: A anotação `@OneToMany` é a escolha correta para a classe `Departamento` porque um departamento pode ter muitos funcionários. `private List<Funcionario> funcionarioList;` declara uma coleção para armazenar esses muitos funcionários. O atributo `mappedBy = "departamento"` é crucial em relacionamentos bidirecionais e indica que o relacionamento é mapeado pelo campo `departamento` na classe `Funcionario`, significando que a chave estrangeira está na tabela de `Funcionario`. `cascade = CascadeType.ALL` propaga operações (como salvar ou excluir) do departamento para seus funcionários, e `fetch = FetchType.EAGER` significa que os funcionários serão carregados automaticamente junto com o departamento.
B) Incorreta: A anotação `@ManyToOne` é usada quando uma entidade "filha" se relaciona com uma única entidade "pai" (ex: um funcionário pertence a um departamento). Na classe `Departamento`, que é o lado "um" do relacionamento, não se usa `@ManyToOne` para mapear seus funcionários. Além disso, `private Departamento departamento;` seria o tipo de campo correto para a classe `Funcionario` (referenciando seu departamento), não para a classe `Departamento` para mapear seus funcionários. Armadilha da banca: Esta alternativa tenta confundir o aluno com a anotação e o tipo de campo que seriam usados na classe `Funcionario` (o outro lado do relacionamento), não na `Departamento`.
C) Incorreta: A anotação `@OneToOne` é usada para relacionamentos um-para-um, onde uma entidade se relaciona com apenas uma outra entidade. O Modelo Entidade-Relacionamento mostra claramente uma cardinalidade de um-para-muitos (um departamento para muitos funcionários), não um-para-um.
D) Incorreta: A anotação `@ManyToOne` está incorreta para a classe `Departamento` (lado "um" do relacionamento). Além disso, `@ManyToOne` mapeia para uma única entidade, não para uma `List` de entidades, tornando `private List<Funcionario> funcionarioList;` incompatível com `@ManyToOne`.
E) Incorreta: Embora `@OneToMany` seja a anotação correta para a cardinalidade, o atributo `mappedBy = "funcionario"` está incorreto. O `mappedBy` deve referenciar o nome do atributo na classe `Funcionario` que mapeia de volta para `Departamento` (que seria `departamento`, não `funcionario`). Além disso, `private Departamento departamento;` está incorreto, pois um relacionamento `@OneToMany` requer uma coleção (como `List<Funcionario>`) para armazenar os muitos funcionários, não uma única instância de `Departamento`.
Fonte: FCC TRT5 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.
