Questão nº 59
Questão de A definir · FGV DPE-RS 2023 (nº 59)
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 inde
- A@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) (alternativa correta) - B@Collumn(name="Id")
@Sequence(name="seq_chaves") - C@Collumn(name="Id")
@Table(name="tab_chaves") - D@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="sequenceGen")
@SequenceGenerator(name="sequenceGen",
sequenceName=" seq_chaves") - E@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "tableGen")
@TableGenerator(name = "tableGen", table = "tab_chaves",
pkColumnName = "id", pkColumnValue = "tabelaX",
valueColumnName = "valor")
Resposta comentada
Gabarito Alternativa A
JPA (Java Persistence API) permite que você defina chaves primárias para suas entidades e configure o banco de dados para gerar automaticamente os valores dessas chaves. A anotação @Id marca um campo como chave primária, e @GeneratedValue especifica a estratégia de geração automática, como usar o recurso de auto-incremento nativo do banco de dados.
- (A) Correta: A anotação
@Iddesigna o campo como chave primária.@GeneratedValue(strategy=GenerationType.IDENTITY)instrui o JPA a usar a funcionalidade de auto-incremento nativa do banco de dados (comoAUTO_INCREMENTno MySQL,SERIALno PostgreSQL ouIDENTITYno SQL Server) para gerar os valores da chave. Esta é uma das formas mais diretas e comuns de geração automática de IDs. - (B) Incorreta:
@Collumn(name="Id")é para mapear o nome da coluna no banco de dados, não para a estratégia de geração.@Sequence(name="seq_chaves")não é uma anotação padrão do JPA para definir uma estratégia de geração de chave primária; a anotação correta para configurar uma sequência é@SequenceGenerator. - (C) Incorreta:
@Collumn(name="Id")mapeia o nome da coluna.@Table(name="tab_chaves")é usada para especificar o nome da tabela à qual a entidade está mapeada, não tem relação com a geração automática de chaves primárias. - (D) Incorreta: Esta alternativa apresenta uma forma válida e comum de gerar chaves primárias usando uma sequência de banco de dados.
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="sequenceGen")define a estratégia para usar uma sequência, e@SequenceGeneratorconfigura essa sequência. A armadilha aqui é que, embora seja uma solução tecnicamente correta e amplamente utilizada, o gabarito oficial prefereGenerationType.IDENTITY. Isso pode ser porque a questão busca a forma mais direta de usar o auto-incremento nativo do banco de dados, ou a que exige menos configuração explícita de um gerador dentro do JPA (já queIDENTITYse baseia diretamente no tipo de coluna do banco). - (E) Incorreta: Esta alternativa descreve uma forma válida de geração de chaves primárias usando uma tabela auxiliar no banco de dados para gerenciar os IDs.
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tableGen")define a estratégia, e@TableGeneratorconfigura a tabela que será usada para esse fim. Embora seja uma estratégia funcional, é geralmente mais complexa queIDENTITYeSEQUENCE, e o gabarito indica preferência pela simplicidade e direcionalidade doIDENTITY.
Fonte: FGV DPE-RS 2023 Técnico - Apoio Especializado (Programador) (Caderno Tipo 1). Reproduzida para fins de estudo.