Uma aplicação que trabalha com Hibernate e EJB possui uma cl...

Próximas questões
Com base no mesmo assunto
Q566690 Programação
Uma aplicação que trabalha com Hibernate e EJB possui uma classe POJO − Plain Old Java Object utilizada no mapeamento objeto-relacional com uma tabela do banco de dados. Nessa classe, há um atributo calculado chamado valorTotalPedido que, para ser utilizado apenas em tempo de execução e descartado após finalizar o seu serviço temporário, deverá ser anotado com
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: D - @Transient

Para entender essa questão, é essencial ter conhecimento sobre JPA (Java Persistence API) e suas anotações, que são usadas para definir o mapeamento entre classes POJO (Plain Old Java Object) e tabelas de banco de dados em aplicações Java EE que utilizam Hibernate e EJB (Enterprise Java Beans).

A anotação @Transient é utilizada para indicar que um determinado atributo de uma entidade não deve ser persistido no banco de dados. Ou seja, esse atributo será ignorado completamente quando a entidade for persistida ou recuperada, o que é exatamente o comportamento desejado para o atributo valorTotalPedido mencionado na questão.

O atributo valorTotalPedido é um atributo calculado, que existe apenas em tempo de execução e não precisa ser salvo no banco de dados. A anotação @Transient garante que esse atributo é utilizado apenas durante a execução do programa e não é mantido no estado permanente do objeto, ou seja, não é persistido.

As outras opções são anotações que têm outros propósitos dentro do JPA e não são adequadas para atributos que devem ser ignorados em operações de persistência:

  • @Embedded: Usada para indicar que uma classe aninhada deve ser considerada parte da mesma entidade.
  • @TemporaryAttribute: Não existe dentro do contexto do JPA.
  • @GeneratedValue: Usada para especificar estratégias de geração de valores automáticos para chaves primárias.
  • @Basic: É a anotação padrão para campos simples e indica que a propriedade deve ser persistida no banco de dados.

Portanto, a anotação correta para o atributo que não deve ser persistido é @Transient, pois atende à requisição de que o atributo seja descartado após o serviço temporário para o qual ele foi criado.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Evitando a Persistência com @Transient


Existem algumas situações em que um atributo é utilizado apenas como sendo um auxiliar. Por exemplo, atributos para valores calculados são utilizados apenas em tempo de execução e devem ser descartados após finalizar o seu serviço temporário. A especificação do EJB 3 prove a anotação @Transient para esses campos que não precisam ser armazenados na base de dados. Essa anotação não tem qualquer atributo. Sua utilização é bem simples bastando apenas adicionar a anotação na variável de instância ou no método getter apropriado.


Fonte: http://www.devmedia.com.br/mapeamento-hibernate-configurando-tabelas-e-colunas/29526

A questão fala que o atributo valorTotalPedido é um atributo calculado que não será persistido e que será descartado ao finalizar o serviço. Logo vamos analisar cada anotação apresentada nos itens:


(A) @Basic

De acordo com a documentação da anotação @Basic disponível em (https://docs.oracle.com/javaee/6/api/javax/persistence/Basic.html), ela é a forma mais simples de mapeamento com uma coluna do banco de dados e pode ser aplicada num atributo persistente ou numa instancia de um dos tipos a seguir: Tipos primitivos, wrappers dos tipos primitivos, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp, byte[], Byte[], char[], Character[], enums, e qualquer outro tipo que implemete java.io.Serializable.

Item errado. A anotação @Basic persiste no banco de dados e por isso não é recomendada para criar atributos calculados.


(B) @Embedded

De acordo com a documentação (https://docs.oracle.com/javaee/6/api/javax/persistence/Embedded.html), a anotação @Embedded especifica um campo ou atributo de uma entidade cujo o valor é uma instancia de uma classe embarcável(embedded class). A classe embarcável precisa ser marcada pela classe @Embeddable.

Item errado. A anotação @Embeddable persiste os dados e aninha informações em um atributo, não é recomendável para criar o atributo calculado mencionado na questão


(C) @TemporaryAttribute

Item Errado. Esta anotação não existe. Vide a lista delas aqui https://docs.oracle.com/javaee/6/api/javax/persistence/package-summary.html


(D) @GeneratedValue

De acordo com a documentação https://docs.oracle.com/javaee/6/api/javax/persistence/GeneratedValue.html, esta anotação é usada para especificar a estratégia de geração dos valores das chaves primárias.

Item Errado. Esta anotação não serve para criar campos calculados. Sua aplicação é a geração de valores para chaves primárias


(E) @Transient

De acordo com a documentação https://docs.oracle.com/javaee/6/api/javax/persistence/Transient.html, esta anotação especifica um campo ou atributo que não é persistente.

Item Correto.

Significado de Transiente

Que não permanece; que passa; transitório, passageiro: sensações transientes.

Que não dura; momentâneo, efêmero: paixões transientes.

Letra B.

 

 

@TemporaryAttribute --> Inexistente

@Transient --> Os valores não precisam ser armazenados em banco de dados.

@GeneratedValue --> Gerar valores para chave primária

@Embedded --> Realiza a persistência de dados, sendo assim, inviável conforme a necessidade da questão.

@Basic --> Também realiza persistência.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo