Java

Pessoal estou com algumas questoes p resolver, vcs poderiam me ajudar?

Questão 1) Qual a condição que uma classe usando a anotação @Embeddable deve satisfazer?
( ) Definir dois ou mais construtores.
( ) Sobrescrever o método toString().
( ) Definir pelo menos um campo com anotação @Id.
( ) Implementar Serializable.

Questão 10) Qual dos parâmetros abaixo não é usado para a anotação @GeneratedValue? (Ref.: 202214430197)
( ) generatorType
( ) generatorType, generator e strategy definem um parâmetro
( ) strategy
( ) generator

Confesso que não sei, mas talvez dá para descobrir no javadoc dessas anotações:

https://docs.oracle.com/javaee/7/api/javax/persistence/Embeddable.html

https://docs.oracle.com/javaee/6/api/javax/persistence/GeneratedValue.html

Isso cheira tema de casa.

Na 1 será q eh @Id ou Serializable?

Sobre a questão 1, o javadoc não ajuda muito. O melhor é olhar na própria especificação.

Classes “Embeddables” são descritas aqui:

https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#a487

Segundo esta seção, o requerimentos destas classes são os mesmo que os das entidades, que são descritos aqui:

https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#a18

Estes são os requerimentos:

  • Deve possuir um constructor com zero parâmetros — os chamados no-arg constructors — E ele deve ter o modificador de acesso public ou protected. (A classe pode ter constructors adicionais também)
  • A classe deve ser uma top-level class. Isto quer dizer que a classe não pode ser declarada dentro do corpo de uma outra classe.
  • Não pode ser um enum e nem uma interface, tem que ser uma classe comum mesmo
  • Nem a classe e nem seus membros, sejam métodos ou campos persistentes, devem ser declarados como final.
  • Devem ser anotadas com @Embeddable ou denotadas no XML.

Ou seja: Nenhuma das 4 opções que a questão apresenta é uma condição que uma @Embeddable deva satisfazer.

  • “Definir dois ou mais construtores”: O único constructor obrigatório é o no-arg constructor.
  • “Sobrescrever o método toString()”: não é obrigatório.
  • “Definir pelo menos um campo com anotação @Id”: Não pode ter campos com esta anotação.
  • “Implementar Serializable”: Não é um requerimento.

Tem uma parte na especificação bem nesta seção: https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#a132

Que diz o seguinte: “The primary key class must be serializable”.

E eu já vi gente argumentando que isto significa que a classe @Embeddable usada como @EmbeddedId deve ser @Serializable, mas eu acho que isto não é verdade porque uma “primary key class” representa uma primary key comum.

Já primary keys que usam @EmbeddedId são chamadas de “composite primary key”.

Eu testei usando Hibernate 6 e a @Embeddable, tanto usada com @Embedded como com @EmbeddedId, não exigiu @Serializable mesmo.

1 curtida

Olha esse estudo ,o q vc acha

Eu li com mais atenção a seção abaixo.

https://jakarta.ee/specifications/persistence/3.1/jakarta-persistence-spec-3.1.html#a132

E entendi melhor o que ela diz.

Podemos usar classes anotadas com @Embeddable como composite primary key. Classes que são usadas desta forma são chamadas de primary key classes.

As Primary key classes tem requerimentos adicionais e alguns deles são:

  • Devem ser serializaveis
  • Devem definir equals e hashCode

Então, este trecho que vc postou está certinho.

Com base nisso, voltando para a questão 1, dos 4 itens apresentados, acredito que o único que deve ser satisfeito é o quarto (implementar Serializable).

Só tenho mais uma observação: O trecho que vc postou me deu a entender que @Embeddable é sinônimo de “chave composta”. Só por este trecho não dá para ter certeza de que essa foi a intenção do autor, mas, de qualquer forma, é importante destacar que nem toda classe anotada com @Embeddable é usada como chave composta.

Me desculpe pela minha resposta anterior, pois eu acho que ela pode ter te confundido mais. Quando eu a escrevi, não tinha percebido que as @Embeddable usadas como chave composta possuiam requisitos adicionais.

1 curtida

tranquilo

Tenho mais questoes de hibernate…vc poderia ajudar?

1 - Um componente EJB não pode ser usado por mais de um tipo de aplicação, a não ser por:

( )páginas HTML
( )servlets
( )páginas JSP
( )applets

2 -Qual é o elemento raiz do arquivo hibernate.cfg.xml?
( )< hibernate-configuration >
( )< hibernate >
( )< jpa-configuration >
( )< config-hibernate >

3 -Qual anotação especifica um campo chave no banco de dados?
( )@ Id
( )@ Column
( )@ Table
( )@ Entity

4 - A anotação @JoinTable deve ser usada em conjunto com:
( )@ ManuToOne
( )@ ManuToMany
( )@ OneToOne
( )@ OneToMany

5 - Dado o código cujas linhas estão numeradas:
O código trata de uma inclusão no banco de dados. O que deve ser feito para que ele se torne uma alteração?
( )Devemos substituir a linha 4.
( )Devemos elimitar a linha 1.
( )Devemos incluir uma instrução após a linha 9
( )Devemos remover a linha 8.

6 - O que faz o método refresh() de EntityManager?
( )Remove os atributos da entidade.
( )Reinicia os atributos da entidade.
( )Inclui novos atributos na entidade.
( )Atualiza os atributos da entidade.

7 - O que é necessário para a execução do método update?
( )A entidade deve pertencer a uma classe com construtor padrão.
( )A entidade deve estar no estado persistente.
( )A entidade deve ter sido instanciada recentemente
( )A entidade deve estar no estado

Transiente *

8-

Uma das vantagens da utilização do Hibernate é:
( )O acesso ao banco de dados é realizado sem uma string de conexão.
( )O uso de classes como entidades.
( )O uso de tabelas como entidades.
( )Não é necessário criar o banco de dados.

9 - O que faz a instrução abaixo?
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

( )Cria um objeto Transaction.
( )Lê os arquivos de script do banco de dados.
( )Lê os arquivos de configuração e mapeamento.
( )Cria uma nova sessão.

10 -Qual dos tipos abaixo é usado para realizar tarefas de inicialização do Hibernate?

( )Session
( )Transaction
( )SessionFactory
( )Configuration

Eu acho que consigo te ajudar em algumas.

Nas questões 2, 3, 4, 6, 7 e 8 qual vc acha que é a resposta certa de cada uma delas e por quê vc acha que é a certa?

eu já resolvi algumas,estou na duvida da questao 1

Qual é a questão?

1 - Um componente EJB não pode ser usado por mais de um tipo de aplicação, a não ser por:

( )páginas HTML
( )servlets
( )páginas JSP
( )applets

Ah, aquela sobre EJB. Eu sinceramente nem imagino qual seja a resposta.