Pular para o conteúdo principal

Questão de Programação — Java — FGV 2023

ProgramaçãoJava
Código
fg063735
Banca
FGV
Órgão
DPE-RS
Ano
2023
Nível
Médio
Cargo
Técnico - Apoio Especializado - Programador
Quando o J2EE foi substituído pelo JEE5, e as configurações via XML passaram a ser efetuadas com base em anotações, as entidades anotadas do JPA passaram a ser utilizadas no lugar dos Entity Beans.Para definir uma chave primária com geração automática de valores, de forma independente do tipo de banco de dados, a configuração deve ser:
  1. A@Id@GeneratedValue(strategy=GenerationType.IDENTITY)
  2. B@Collumn(name="Id")@Sequence(name="seq_chaves")
  3. C@Collumn(name="Id")@Table(name="tab_chaves")
  4. D@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequenceGen")@SequenceGenerator(name="sequenceGen",sequenceName=" seq_chaves")
  5. E@Id@GeneratedValue(strategy = GenerationType.TABLE,generator = "tableGen")@TableGenerator(name = "tableGen", table = "tab_chaves",pkColumnName = "id", pkColumnValue = "tabelaX",valueColumnName = "valor")
Revelar gabarito e comentário

GabaritoE — @Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "tableGen") @TableGenerator(name = "tableGen", table = "tab_chaves", pkColumnName = "id", pkColumnValue = "tabelaX", valueColumnName = "valor")

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Geração automática de chave primária com JPA

Gabarito: letra E. A única estratégia de geração de chave primária que funciona de forma independente do tipo de banco de dados é GenerationType.TABLE, pois utiliza uma tabela própria para controlar a numeração, sem depender de recursos específicos como auto-incremento (IDENTITY) ou sequências (SEQUENCE).

A questão exige conhecimento das quatro estratégias de @GeneratedValue e sua portabilidade. A banca testa se o candidato sabe que TABLE é a abordagem mais portável, enquanto as demais dependem de funcionalidades particulares de cada SGBD.

Critério

Alternativa A

Alternativa B

Alternativa C

Alternativa D

Alternativa E

Anotação de chave primária

@Id

Ausente

Ausente

@Id

@Id

Anotação de geração

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Sequence(name="seq_chaves") (não é JPA padrão)

@Table(name="tab_chaves") (não é para geração)

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequenceGen")

@GeneratedValue(strategy=GenerationType.TABLE, generator="tableGen")

Anotação complementar

Nenhuma

Nenhuma

Nenhuma

@SequenceGenerator(name="sequenceGen", sequenceName="seq_chaves")

@TableGenerator(name="tableGen", table="tab_chaves", pkColumnName="id", pkColumnValue="tabelaX", valueColumnName="valor")

Estratégia de geração

IDENTITY (auto-incremento)

Sequência (não configurada corretamente)

Nenhuma (não gera chave)

SEQUENCE

TABLE

Independência de banco

❌ Depende de auto-incremento

❌ Depende de sequência

❌ Não gera chave

❌ Depende de sequência

✅ Funciona em qualquer banco relacional

Correção sintática

✅ Correta

@Collumn (erro de digitação)

@Collumn (erro de digitação)

❌ Espaço em " seq_chaves"

✅ Correta

Alternativa A — ❌ Incorreta

Utiliza GenerationType.IDENTITY, que depende de um recurso de auto-incremento do banco de dados (ex.: MySQL, PostgreSQL). Não é independente, pois o banco precisa suportar esse mecanismo.

Alternativa B — ❌ Incorreta

Apresenta erros de digitação (@Collumn ao invés de @Column) e usa @Sequence, que não é uma anotação JPA padrão para geração automática. Para geração com sequências, seria necessário @GeneratedValue(strategy=SEQUENCE) combinado com @SequenceGenerator.

Alternativa C — ❌ Incorreta

Contém @Collumn (incorreto) e @Table, que serve para mapear a entidade a uma tabela, não para geração de chave. Falta a anotação @GeneratedValue.

Alternativa D — ❌ Incorreta

Utiliza GenerationType.SEQUENCE, que depende da existência de uma sequência no banco de dados (ex.: Oracle). Não é independente, e além disso o código apresenta um espaço em sequenceName=" seq_chaves".

Alternativa E — ✅ Correta ⟵ GABARITO

Emprega @GeneratedValue(strategy = GenerationType.TABLE) e @TableGenerator. O JPA cria uma tabela (no exemplo, "tab_chaves") para armazenar o último valor gerado, permitindo que a geração funcione em qualquer banco relacional sem necessidade de recursos específicos. Essa é a forma mais portável e independente.

Gabarito: letra E.

Link permanente: /questoes/fg063735