Você está na página 1de 92

Aula 05

Desenvolvimento de Software para Concursos - Curso Regular


Professor: Diego Carvalho
Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

AULA 05

SUMÁRIO PÁGINA
Apresentação 01
- Java Persistence API (JPA) 02
- Hibernate 25
- Java Database Conectivity (JDBC) 55
- Java Virtual Machine (JVM) 65
Lista de Exercícios Comentados 64
Gabarito 90

Lógica de Programação. Tipos de Dados. Operadores e Expressões. Estruturas de Controle, Seleção,


Repetição e Desvio. Recursividade. Funções e Procedimentos. Complexidade de Algoritmos. Métodos de
Ordenação. BubbleSort, InsertionSort, SelectionSort, QuickSort, ShellSort, MergeSort e HeapSort.
Estruturas de Dados. Vetores e Matrizes. Lista Encadeada. Pilhas. Filas. Árvore. Grafos. Hashing. Estrutura
de Arquivos. Padrões de Projeto GOF. Padrões de Projeto Java EE. Padrões de Projeto GRASP. Java SE.
Conceitos Básicos. Plataforma Java. Compilação e Interpretação. Passagem por Valor e Referência.
Empacotamento. Raiz. Identificadores. Blocos e Comandos. Comentários. Palavras Reservadas. Tipos
Primitivos. Operadores. Vetores. Conversão de Tipos. Controle de Fluxos. Classes. Objetos. Atributos.
Métodos. Herança. Encapsulamento. Interface. Polimorfismo. Interface Gráfica. Tipos Enumerados.
Anotações. Classes Internas. Reflexão e Genéricos. Tratamento de Exceções. Sincronismo e Multithreading.
Coleções. Streams e Serialização. Classes e Operações de I/O. Novidades Java 8. Arquitetura Java EE. JSP.
Servlets. JSF. JPA. Hibernate. JDBC. JVM. Spring. Struts. JMS. JNDI. JTA. JSTL. HTML e CSS. JavaScript.
JQuery. AJAX. DHTML. XHTML. XML. XSLT. XSD. Sistemas Móveis. Android. iOS. Segurança no
Desenvolvimento. Compiladores e Interpretadores. Ferramentas de Controle de Versão. SVN. CVS. Git.
Análise Estática de Código-Fonte. SonarQube. Integração Contínua (e outros) Framework .NET, C#, Visual
Basic, ASP.NET e Visual Studio (Prof. Mayara Rosa) Delphi e PHP (Prof. Mayara Rosa).
16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 1 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JAVA PERSISTENCE API (JPA)

Galera, Java começou a ficar extremamente popular em ambientes corporativos,


mas havia um problema que estava incomodando os desenvolvedores:
produtividade estava prejudicada porque eles estavam perdendo muito tempo nas
codificações de Queries SQL e em seu respectivo código JDBC. E quando era
necessário mudar o banco de dados por um de outro fabricante? O que fazer?

Além disso, Java ajudou a popularizar o Paradigma Orientado a Objetos, em que


informações eram representadas por meio de classes, atributos, herança,
polimorfismo, encapsulamento, etc. Isso gerava conflito com o Paradigma
Relacional dos bancos de dados, em que as informações eram representadas por
meio de tabelas, colunas, linhas, chaves primárias, chaves estrangeiras, etc.

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir algumas ferramentas que auxiliavam
essa tarefa – são as famosas ORM – Object-Relational Mapping (ou Mapeamento
Objeto-Relacional). As mais conhecidas eram Hibernate1 e TopLink – a primeira,
open-source, tornou-se uma referência mundial.

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de Descritores de
Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e
atualizações de dados. O desenvolvedor define como os objetos são mapeados e
o framework faz o resto – acessa o Banco de Dados, gera Comandos SQL, etc.

A utilização desses frameworks de mapeamento objeto-relacional permitiu


16712855225

preservar as vantagens do Paradigma Relacional (Robustez, Maturidade, Facilidade


de Pesquisa, etc) para a Camada de Persistência; e preservar as vantagens do
Paradigma Orientado a Objetos (Reúso, Modularidade, Herança, Polimorfismo, etc)
para a Camada de Negócios.

Antes de continuar, preciso que vocês entendam o conceito de POJO (Plain Old
Java Object). Trata-se de objetos simples e comuns que não deveriam ter que:

 Estender interfaces pré-especificadas:

1
Possui até uma versão para .NET chama-se NHibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 2 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
public class Foo extends javax.servlet.http.HttpServlet { ...

 Implementar classes pré-especificadas:

public class Bar implements javax.ejb.EntityBean { ...

 Conter anotações pré-especificadas:

@javax.persistence.Entity public class Baz { ...

Galera, esse conceito é teórico! Na prática, por dificuldades técnicas (entre outras
razões), consideram-se POJO também as classes que contenham anotações pré-
especificadas. Qual a vantagem de se utilizar POJO? Como ele não estende nada
nem implementa interfaces, ele não possui dependências por frameworks
corporativos e pode se focar somente na lógica de negócio.

Ele também é importante para desacoplar o código da aplicação dos frameworks


de infraestrutura. Mudou o framework? O POJO continuará funcionando – inclusive,
a mudança será fácil e conterá menos riscos! Até a Especificação EJB 2.0,
persistência de dados era parte da Plataforma EJB e era realizada por meio de Entity
Beans – que eram uma espécie de POJO.

Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e


um JavaBean! do JavaBean é um POJO, mas nem todo POJO um JavaBean.
Eles são muito parecidos, mas o JavaBean segue diversas convenções de
programação, tais como: nomenclatura dos métodos, construtor público padrão e
sem parâmetros, entre outros. Para o JPA, o POJO é a unidade básica!

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao
16712855225

líder do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar


os frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores
ideias do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

FAQ: JPA

Q: Why didn't you adopt Hibernate or JDO as the persistence API?

A: We chose to combine the best ideas from many sources in the new persistence API
and create a practical, easy to use API to meet the needs of a majority of Java EE and

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 3 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Java SE community members. The Java Persistence API is not based on any single
existing persistence framework but incorporates- and improves upon - ideas
contributed by many popular frameworks, including Hibernate, TopLink, JDO, and
others.

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente deste), permitindo sua utilização Ambientes Java SE e Java EE.

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para
gerenciamento de dados relacionais em Aplicações Java – em outras palavras, ele
simplifica a persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo
Container Web ou pelo Application Client.

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como


ele evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez
no Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317)
e, atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste
em quatro partes:

 Java Persistence API (JPA): define um mapeamento objeto/relacional para


gerenciamento de dados relacionais;

 Java Persistence Query Language (JPQL): define queries, em geral, estáticas


para entidades e seus estados persistentes;
16712855225

 Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para
entidades e seus estados persistentes;

 Mapeamento de Metadados O/R: define um mapeamento por meio de


Descritores de Implantação (XML) ou Anotações (Annotations).

Há duas formas de mapear classes de negócio em entidades de um banco de dados:


Descritores de Implantação (XML) ou Anotações (Annotations)! O XML foi
praticamente engolido pelas anotações, tanto que hoje em dia é muito raro utilizá-
lo para certas tarefas. Por que, professor? Porque as anotações evitam a criação de
complexos arquivos de configuração em XML. Vejamos algumas anotações:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 4 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

ANOTAÇÃO DESCRIÇÃO

@Entity Indica que uma classe é uma entidade que deve ser persistida como tabela.
@Table Indica o nome de uma tabela para qual a entidade é mapeada.
@Column Indica que um atributo de uma classe é uma coluna de uma tabela.
@Id Indica que um atributo é a chave primária de uma entidade.
@namedQuery Define uma consulta.
@namedQueries Define várias consultas.
@UniqueConstraint Indica que uma propriedade não pode conter valores duplicados.
@Transient Indica que uma propriedade não deve ser persistida no banco de dados.
@Inheritance Define um relacionamento de herança à entidade.
@ManyToOne Mapeamento muitos para um (N:1).
@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).

Galera, vocês sabem o que é um EntityManager? Trata-se de uma interface que


funciona como serviço centralizado para todas as ações de persistência – mapeando
um conjunto de classes para um banco de dados particular. Em outras palavras, ele
é responsável por realizar operações de sincronismo com o Banco de Dados (Inserir,
Remover, Atualizar e Consultar), além de gerenciar o ciclo de vida das entidades.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 5 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 EntityManager.persist(Object): persiste o objeto Object;


 EntityManager.remove(Object): remove o objeto Object;
 EntityManager.find(Object): busca o objeto Object;
 EntityManager.refresh(Object): atualiza o objeto Object;
 EntityManager.createQuery(String): realiza uma consulta String;

Sabe quando você deseja realizar uma inserção no banco de dados? Pois é, o objeto
do EntityManager irá realizar essa tarefa! Esse gerenciador de entidades interage
com um Persistence Context, que é um local em que ficam armazenados os objetos
(entidades) que estão sendo manipulados pelo EntityManager corrente. Ele funciona
como um contêiner que guarda as entidades gerenciadas pelo EntityManager.

Um artigo do DevMedia faz uma excelente comparação entre Persistence Context


e a Memória Cache de um Processador (aquela mais rápida):

Imagine o Persistence Context como um container capaz de armazenar todas as


entidades que serão manipuladas pelo EntityManager. No início da nossa aplicação,
não temos Persistence Context ou EntityManager, pois não realizamos nenhuma
operação com o banco. Então, você decide buscar o usuário “Mario” no BD e, neste
momento, são criados 1 EntityManager + 1 PersistenceContext (ligados diretamente).

O EntityManager vai até o Persistence Context e checa se o usuário “Mario” já está


lá, e como não está, ele irá ao banco de dados realizar a consulta desejada retornando
o objeto Mario preenchido e populado. Depois de retornar o usuário “Mario” do BD,
o EntityManager grava esse objeto no Persistence Context (Nosso Cache). Assim, da
próxima vez que precisar deste objeto, não precisará ir ao banco de dados.

Então como você pode perceber no cenário acima, o EntityManager sempre consulta
o Persistence Context, checando se o objeto já está lá e, caso não esteja, aí sim ele irá
16712855225

até o banco de dados. Quando o EntityManager é destruído (no fim de uma


requisição) o Persistence Context também será destruído, impossibilitando de usá-los
em outros EntityManager com outros PersistenceContext.

Lá em cima, eu afirmei que um EntityManager mapeava um conjunto de classes


para um banco de dados particular. Esse conjunto de classes é denominado
Persistence Unit2. Antes mesmo de pensar em criar entidades ou consultá-las por
meio do EntityManager, é necessário empacotar esse conjunto de classes em um
Persistence Unit, que é definido no Descritor de Implantação (persistence.xml).

2
Ele especifica qual implementação será utilizada (Hibernate, Toplink, JDO, etc); conexão com banco, etc.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 6 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

O EntityManager pode ser criado ou pode ser obtido de um EntityManagerFactory


– que seria uma espécie de fábrica de EntityManager. No Java SE, deve-se utilizar o
EntityManagerFactory para obter o EntityManager, o que não é necessariamente
exigido no Java EE. Para obter um EntityManager, devemos primeiro criar o
EntityManagerFactory e, só depois, criar o EntityManager:

EntityManagerFactory emf Persistence createEntityManagerFactory Exemplo );


em = emf.createEntityManager();

É importante notar que a classe javax.persistence.Persistence procura o Descritor de


Implantação persistence.xml dentro de seu classpath. Ele procurará o Persistence
Unit com o mesmo nome do parâmetro da função createEntityManagerFactory, i.e.,
xemplo”. Obtido o EntityManagerFactory, basta chamar a função
createEntityManager.

16712855225

O ciclo de vida dos objetos de entidade consiste em quatro estados: Novo (New),
Gerenciado (Managed), Removido (Removed) e Destacado (Detached Quando um
objeto é criado inicialmente seu estado é Novo. Nesse estado, o objeto ainda não
está associado a um EntityManager e não possui qualquer representação no banco
de dados. Bacana?

Um objeto se torna Gerenciado quando é persistido no banco de dados por meio


do método de persistência do EntityManager, que deve ser invocado dentro de uma
transação ativa. Quando se dá um Commit na transação, o objeto é persistido no

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 7 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

banco de dados. Objetos recuperados do banco de dados por um EntityManager


também estão no estado Gerenciado.

Se um objeto Gerenciado é modificado dentro de uma transação ativa, a mudança


é detectada pelo EntityManager e a atualização é propagada no banco de dados
após o Commit. Um objeto Gerenciado também pode ser recuperado do banco de
dados e marcado para remoção, utilizando o método remove do EntityManager
dentro de uma transação ativa.

O objeto modifica seu estado de Gerenciado para Removido, e é fisicamente


deletado do banco de dados após o Commit. O último estado, Destacado,
representa um objeto que foi desconectado do EntityManager Quando um objeto
é Destacado, mudanças sucessivas não irão mais ser rastreadas e nenhuma
sincronização automática do banco de dados será realizada.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 8 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - – TRE/MS - Analista de Sistemas – A API de Persistência Java


pode ser utilizada no container Web e/ou no container EJB e disponibiliza
recursos de mapeamento objeto-relacional as aplicações Java EE.

Comentários:

Java Persistence API (JPA) é um padrão para persistência de dados que fornece aos
desenvolvedores um mapeamento objeto/relacional para gerenciamento de dados
relacionais em Aplicações Java – em outras palavras, ele simplifica a persistência de
dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web ou pelo
Application Client.

Conforme vimos em aula, a questão está completamente perfeita!

Gabarito: C

(CESPE - 2014 - -SE - Analista Judiciário - Banco de Dados) A JPA, que foi
criada como alternativa para o Hibernate para conexão com os sistemas
gerenciadores de banco de dados, está nativa no Java SE a partir da versão 1.3.

Comentários:
16712855225

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder
do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os
frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias
do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

Conforme vimos em aula, JPA não é uma alternativa ao Hibernate! JPA é a


especificação e Hibernate é a implementação dessa especificação (assim como
TopLink, OpenJPA, JDO, etc).

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 9 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - 2014 - TRT - 13ª Região (PB) - Técnico Judiciário - Tecnologia da


Informação Java Persistence API (JPA) é uma API padrão da linguagem Java para
persistência de dados em bancos de dados relacionais. Em uma aplicação que
utiliza JPA:

a) pode ser utilizada, como provedor de persistência, as bibliotecas EclipseLink,


Hibernate, OracleTopLink, JBossSeam e JDBCProvider.

b) as classes de entidade do banco de dados permitem o mapeamento entre


objetos da classe e tabelas do banco de dados, utilizando anotações como
@Table, @Entity, @PrimaryKey, @Column, @Constraint, @Foreignkey e @EJB.

c) todas as operações realizadas nas tabelas do banco de dados, como inserção


de dados, alteração, consultas e exclusão, são realizadas sem o uso de instruções
SQL, ou seja, o desenvolvedor não precisa conhecer SQL para programar.

d) as configurações de acesso a banco de dados normalmente ficam no arquivo


persistence.xml, ligado à aplicação, de forma que se for alterado o servidor de
banco de dados não seja necessário alterar o código-fonte Java da aplicação.

e) as relações existentes entre as tabelas do banco de dados não são refletidas


nas classes de entidade criadas na aplicação, o que torna a execução mais rápida.
O mapeamento de relações é feito em tempo de execução pelas bibliotecas do
provedor de persistência.

Comentários:

(a) Provedor de Persistência é o framework que fornece meios de se fazer o


16712855225

mapeamento objeto/relacional – em geral, implementam a Especificação JPA.


Dentro os listados, JBoss Seam e JDBCProvider não realizam esse trabalho; (b) @EJB
não auxilia no mapeamento entre objetos da classe e tabelas do banco de dados.
(c) Vejam que ele citou as quatro operações básicas, mas existem outras e é possível
que se necessite saber SQL para programar; (d) Perfeito, as configurações de acesso
ao banco ficam no persistence.xml, permitindo mudanças de servidor de banco de
dados sem a necessidade de alterar o código. (e) Claro que as relações devem ser
refletidas nas classes de entidade (@OneToOne, @ManyToOne, etc).

Gabarito: D

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 10 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência


Java utiliza descritores de implantação, não permitindo uso de anotações.

Comentários:

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele
evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no
Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e,
atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em
quatro partes:

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de Descritores de
Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e
atualizações de dados. O desenvolvedor define como os objetos são mapeados e o
framework faz o resto – acessa o banco, gera os comandos SQL, etc.

Conforme vimos em aula, não existe JPA 3.0 – vocês acham que a banca anulou?
De todo modo, a versão atual permite – sim – a utilização de Descritores de
Implantação e Anotações.

Gabarito: E

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência


Java provê uma linguagem de consulta de persistência Java que é uma forma
melhorada da linguagem de consulta do EJB.

Comentários:
16712855225

É interessante notar um pouco da evolução do Java Persistence API (JPA) e como ele
evolui harmonicamente com o Ambiente Java EE. Ele apareceu pela primeira vez no
Java EE 5 (JSR220). Depois ele se transformou em JPA 2.0 no Java EE 6 (JSR 317) e,
atualmente, temos o JPA 2.1 – no Java EE 7 (JSR 338). De todo modo, ele consiste em
quatro partes:

 Java Persistence API (JPA): define um mapeamento objeto/relacional para


gerenciamento de dados relacionais;
 Java Persistence Query Language (JPQL): define queries estáticas, em geral, para
entidades e seus estados persistentes;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 11 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 Java Persistence Criteria API (JPCA): define queries dinâmicas, em geral, para
entidades e seus estados persistentes;
 Mapeamento de Metadados O/R: define um mapeamento por meio de
Descritores de Implantação (XML) ou Anotações (Annotations).

Conforme vimos em aula, não existe JPA 3.0 – vocês acham que a banca anulou?
De todo modo, ele fornece – sim – uma linguagem de consulta de persistência:
JPQL. De fato, ela é melhor que a EJB-QL, que existia anteriormente – vejamos o
que diz o FAQ:

Q: What are some of the main features of the Java Persistence API?

A: The Java Persistence API is a POJO persistence API for object/relational mapping.
It contains a full object/relational mapping specification supporting the use of Java
language metadata annotations and/or XML descriptors to define the mapping
between Java objects and a relational database. It supports a rich, SQL-like query
language (which is a significant extension upon EJB QL) for both static and dynamic
queries. It also supports the use of pluggable persistence providers.

Gabarito: C

(CESPE - 2010 – MPU – Analista de Sistemas A API de Persistência Java é


embasada em ideias contidas em frameworks líderes de mercado, como
Hibernate, Oracle TopLink e Objetos de Dados Java.

Comentários:

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder
16712855225

do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os


frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias
do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

Conforme vimos em aula, JPA pegou as melhores ideias dos frameworks líderes de
mercado e condensou em uma especificação.

Gabarito: C

(CESPE - 2013 – TRE/MS – Analista de Sistemas Assinale a opção correspondente


ao elemento que, além de ser utilizado para definir um meio de mapeamento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 12 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

objeto-relacional para objetos Java simples e comuns (POJOs), denominados


beans de entidade, também é utilizado para gerenciar o desenvolvimento de
entidades do modelo relacional em plataforma nativa Java SE e Java EE.

a) JSF
b) SVN
c) JPA
d) spring
e) struts

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e


um JavaBean! Todo JavaBean é um POJO, mas nem todo POJO é um JavaBean. Eles
são muito parecidos, mas o JavaBean segue diversas convenções de programação,
tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros,
entre outros. Para o JPA, o POJO é a unidade básica!

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente deste), permitindo sua utilização em Ambientes Java SE e Java EE.
16712855225

Ele também é importante para desacoplar o código da aplicação dos frameworks de


infraestrutura. Mudou o framework? O POJO continuará funcionando – inclusive, a
mudança será fácil e conterá menos riscos! Até a Especificação EJB 2.0, a persistência
de dados era parte da Plataforma EJB e era realizada por meio de Entity Beans – que
eram uma espécie de POJO.

Conforme vimos em aula, JPA é utilizado para realizar o mapeamento


objeto/relacional, utilizando POJOs, em ambientes Java SE e Java EE.

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 13 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas Quando se utiliza


JPA, um EntityManager mapeia um conjunto de classes a um banco de dados
particular. Este conjunto de classes, definido em um arquivo chamado
persistence.xml, é denominado:

a) persistence context.
b) persistence unit.
c) entity manager factory.
d) entity transaction.
e) persistence provider.

Comentários:

Lá em cima, eu afirmei que um EntityManager mapeava um conjunto de classes para


um banco de dados particular. Esse conjunto de classes é denominado Persistence
Unit. Antes mesmo de pensar em criar entidades ou consultá-las por meio do
EntityManager, é necessário empacotar esse conjunto de classes em um Persistence
Unit, que é definido no Descritor de Implantação (persistence.xml).

Conforme vimos em aula, trata-se do Persistence Unit.

Gabarito: B

(CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas Os objetos


mapeados na linguagem Java que devem ser persistidos como objetos precisam
utilizar JPA (Java Persistence API), pois o JPA permite realizar o mapeamento
objeto/relacional automatizado e transparente e sua persistência em um banco
de dados relacional. 16712855225

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Pessoal, olhem que questão maluca! Você precisa necessariamente do JPA? Não, eu
posso usar frameworks que não implementam o JPA. Discordo do gabarito!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 14 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Gabarito: C

10. (FGV - 2009 – MEC – Analista de Sistemas – C) JPA é uma tecnologia utilizada
no desenvolvimento de aplicações para Web, similar às tecnologias Active Server
Pages (ASP) da Microsoft ou PHP.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, essa definição não faz sentido algum para JPA! No
entanto, substituindo JPA por JSP, a definição seria perfeita!

Gabarito: E

11. (CESPE - 2010 - TRE-BA - Programador de computador As tecnologias JPA e


EJB permitem, com o uso da linguagem Java, a manipulação de dados que estão
em um banco de dados.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
16712855225

persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, está perfeito – lembrando que JPA faz parte da
Especificação do EJB 3.0.

Gabarito: C

12. (CESPE - 2013 - CPRM - Analista em Geociências - Sistemas) Java Persistence API
(JPA) é uma solução para persistência de dados, utilizada, inclusive, quando há
mapeamento do modelo orientado a objeto para bancos de dados relacionais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 15 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, está perfeito – praticamente idêntica à definição!

Gabarito: C

13. (CESPE - 2013 – TRE/MS - Analista de Sistemas – C JPA é um framework MVC


de aplicações web que se destina a simplificar o desenvolvimento de interfaces
de usuário embasadas em web.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, essa definição não faz sentido algum para JPA! No
entanto, substituindo JPA por JSF, a definição seria perfeita!

16712855225

Gabarito: E

14. (CESPE - 2010 – TRE/MT - Analista de Sistemas – E) JPA lida com a forma como
dados relacionais são mapeados para objetos Java e com a forma como esses
objetos são armazenados em um banco de dados relacional.

Comentários:

Em suma, podemos dizer que o JPA é um padrão para persistência de dados que
fornece aos desenvolvedores um mapeamento objeto/relacional para gerenciamento
de dados relacionais em Aplicações Java – em outras palavras, ele simplifica a

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 16 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

15. (CESGRANRIO - 2011 – PETROBRÁS - Analista de Sistemas – II) JPA é parte


integrante da especificação EJB e serve para definir as interfaces de acesso local
e/ou remoto de um componente EJB.

Comentários:

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente dessa), permitindo sua utilização em Ambientes Java SE e Java EE.

Conforme vimos em aula, é parte integrante da Especificação EJB, mas é uma


especificação de persistência para mapeamento objeto-relacional.

Gabarito: E

16. (CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – A JPA, um framework utilizado na camada de persistência,
define uma forma para mapear POJO (Plain Old Java Objects) para um banco
de dados.
16712855225

Comentários:

Rapidamente: algumas pessoas me perguntam qual a diferença entre um POJO e


um JavaBean! Todo JavaBean é um POJO, mas nem todo POJO é um JavaBean. Eles
são muito parecidos, mas o JavaBean segue diversas convenções de programação,
tais como: nomenclatura dos métodos, construtor público padrão e sem parâmetros,
entre outros. Para o JPA, o POJO é a unidade básica!

Conforme vimos em aula, a questão já começa errada! JPA é uma especificação e,


não, um framework. Como ela não foi anulada, vamos continuar nossa avaliação da
questão. Antigamente, nós usávamos Entity Beans. Após o EJB 3.0 e o surgimento

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 17 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

da Especificação JPA, passamos a utilizar POJO – que são fracamente acoplados,


simples e portáteis. Se ignorarmos o início, a questão está correta.

Gabarito: C

17. (FCC - 2013 – MPE/MA - Analista de Sistemas) Considere a classe Java a seguir
em uma aplicação que utiliza JPA, uma API que permite fazer o mapeamento de
persistência objeto/relacional:

package dao;
import javax.persistence.*;
public class ClienteDao {
private EntityManagerFactory emf;
private EntityManager em;
private EntityTransaction et;
private void iniciarTransacao()
{
emf = Persistence.createEntityManagerFactory("Exemplo");
em = emf.createEntityManager();
et = em.getTransaction();
et.begin();
}
}

O parâmetro “Exemplo”, passado para o método createEntityManagerFactory da


classe Persistence refere-se ao nome:

a) da unidade de persistência definido na tag persistence-unit contida no arquivo


persistence.xml.
b) do arquivo de persistência Exemplo.xml que contém as tags com os parâmetros
de conexão com o banco de dados.
c) do banco de dados relacional ao qual a aplicação deseja se conectar.
d) da tabela do banco de dados na qual os dados da aplicação serão persistidos.
e) da classe que faz a conexão com o banco de dados relacional ao qual a aplicação
16712855225

deseja se conectar.

Comentários:

É importante notar que a classe javax.persistence.Persistence procura o Descritor de


Implantação persistence.xml dentro de seu classpath. Ele procurará o Persistence Unit
com o mesmo nome do parâmetro da função createEntityManagerFactory, i.e.,
“Exemplo”. Obtido o EntityManagerFactory, basta chamar a função
createEntityManager.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 18 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula (e esse é um exemplo padrão, logo a questão veio com
os mesmos nomes), o parâmetro é o Persistence Unit definido no Descritor de
Implantação (persistence.xml).

Gabarito: A

18. (FCC - 2012 - -PE - Programador de computador Em uma classe de entidade


de uma aplicação que utiliza JPA, a anotação que define um atributo que não
será salvo no banco de dados é a:

a) @Optional.
b) @Transient.
c) @Stateless.
d) @Stateful.
e) @Local.

Comentários:

ANOTAÇÃO DESCRIÇÃO

@Entity Indica que uma classe é uma entidade que deve ser persistida como tabela.
@Table Indica o nome de uma tabela para qual a entidade é mapeada.
@Column Indica que um atributo de uma classe é uma coluna de uma tabela.
@Id Indica que um atributo é a chave primária de uma entidade.
@namedQuery Define uma consulta.
@namedQueries Define várias consultas.
@UniqueConstraint Indica que uma propriedade não pode conter valores duplicados.
@Transient Indica que uma propriedade não deve ser persistida no banco de dados.
@Inheritance Define um relacionamento de herança à entidade.
16712855225

@ManyToOne Mapeamento muitos para um (N:1).


@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).

Conforme vimos em aula, trata-se da anotação @Transient.

Gabarito: B

19. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da
Informação Os estados do ciclo de vida de uma instância de uma entidade,
definidos na JPA 2.0, são:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 19 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

a) novo (new), gerenciado (managed), destacado (detached) e removido


(removed).

b) ativo (active), inativo (inactive) e removido (removed).

c) novo (new), temporário (temporary), permanente (permanent) e destacado


(detached).

d) novo (new), temporário (temporary) e destacado (detached)

e) gerenciado (managed), temporário (temporary), permanente (permanent) e


destacado (detached).

Comentários:

O ciclo de vida dos objetos de entidade consiste em quatro estados: Novo (New),
Gerenciado (Managed), Removido (Removed) e Destacado (Detached). Quando um
objeto é criado inicialmente seu estado é Novo. Nesse estado, o objeto ainda não está
associado a um EntityManager e não possui qualquer representação no banco de
dados. Bacana?

Conforme vimos em aula, trata-se da primeira opção!

Gabarito: A

(FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil -


Analista de Informáti Em relação à JPA e Hibernate, considere as seguintes
afirmativas. 16712855225

1. JPA especifica uma JSR.

2. Hibernate especifica uma JSR.

3. Hibernate cuida da camada de persistência enquanto JPA da camada de


transação.

4. Hibernate é uma implementação de JSR.

5. JPA é uma implementação de JSR.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 20 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Assinale a alternativa que indica todas as afirmativas corretas.

a) São corretas apenas as afirmativas 1 e 4.


b) São corretas apenas as afirmativas 2 e 3.
c) São corretas apenas as afirmativas 3 e 4.
d) São corretas apenas as afirmativas 1, 2 e 3.
e) São corretas apenas as afirmativas 3, 4 e 5

Comentários:

Que tal, agora, entrar mais a fundo no JPA? Bem, os frameworks do mercado
possuíam algumas diferenças! A Sun MicroSystems, então, fez uma proposta ao líder
do Projeto Hibernate: fazer uma especificação com o objetivo de padronizar os
frameworks de mapeamento objeto-relacional! Para tal, ele pegou as melhores ideias
do Hibernate, TopLink, JDO, etc e condensou em uma especificação.

(1) Quando se cria uma especificação, dá-se um Número de JSR (Ex: JPA é JSR 338;
JTA é JSR 907; JMS é JSR 914; JSF é JSR 314, etc), portanto JPA especifica, sim, uma
JSR; (2) Não, Hibernate implementa uma JSR; (3) Não, JPA também cuida da Camada
de Persistência; (4) Perfeito, é uma implementação de JSR; (4) Não, JPA é uma
especificação de JSR.

Gabarito: A

21. (FCC - 2011 – TCE/PR – Analista de Sistemas A JPA:

a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE. 16712855225

b) utiliza persistência gerenciada por contêiner (CMP), ou seja, as classes de


entidade e persistência necessitam de um contêiner presente em um servidor de
aplicações para serem executadas.

c) utiliza descritores XML para especificar informações do mapeamento


relacional de objeto, mas não oferece suporte a anotações.

d) suporta consultas dinâmicas nomeadas nas classes de entidade que são


acessadas apenas por instruções SQL nativas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 21 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

e) possui uma interface EntityBeans que padroniza operações Create Read


Update Delete (CRUD) que envolvem tabelas.

Comentários:

E foi assim que surgiu o Java Persistence API (JPA)! Olha que engraçado: a
especificação surgiu após as implementações! Como uma das vantagens, pode-se
trocar de implementação (Ex: Hibernate para TopLink) sem a necessidade de
modificar o código-fonte. Enfim, ele foi incorporado ao EJB 3.0 (apesar de ser
independente dessa), permitindo sua utilização em Ambientes Java SE e Java EE.

(a) Conforme vimos em aula, pode ser usada independente do EJB 3.0, inclusive em
Ambiente Java SE.

(b) Esse item é obsoleto atualmente. Não vale a pena discuti-lo, vai confundir a
cabeça de vocês. Está errado!

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de Descritores de
Implantação (XML) ou Anotações (Annotations) – principalmente para consultas e
atualizações de dados. O desenvolvedor define como os objetos são mapeados e o
framework faz o resto – acessa o banco, gera os comandos SQL, etc.

(c) Conforme vimos em aula, pode-se utilizar Descritores de Implantação (XML) e


Anotações (Annotations).

 Java Persistence API (JPA): define um mapeamento objeto/relacional para


gerenciamento de dados relacionais;
16712855225

 Java Persistence Query Language (JPQL): define queries, em geral, estáticas, para
entidades e seus estados persistentes;

 Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para
entidades e seus estados persistentes;

 Mapeamento de Metadados O/R: define um mapeamento por meio de Descritores


de Implantação (XML) ou Anotações (Annotations).

(d) Conforme vimos em aula, pode-se utilizar JPQL e JPCA, com acesso feito por
SQL ou Java.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 22 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Galera, vocês sabem o que é um EntityManager? Trata-se de uma interface que


funciona como serviço centralizado para todas as ações de persistência – mapeando
um conjunto de classes para um banco de dados particular. Em outras palavras, ele
é responsável por realizar operações de sincronismo com o Banco de Dados (Inserir,
Remover, Atualizar e Consultar), além de gerenciar o ciclo de vida das entidades.

(e) Conforme vimos em aula, o responsável por isso é a interface EntityManager.

Gabarito: A

(FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da


Informação) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que:

a) @NamedQuery é aplicada para definir várias consultas.

b) @Entity define que haverá correspondência da classe com uma tabela do


banco de dados.

c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela. 16712855225

d) @Column(name = "id", nullable = false) define que o atributo da classe


mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além
de definir que tal campo não pode ser nulo.

e) @OneToMany indica que o atributo contém um conjunto de entidades que a


referenciam.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 23 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

ANOTAÇÃO DESCRIÇÃO

@Entity Indica que uma classe é uma entidade que deve ser persistida como tabela.
@Table Indica o nome de uma tabela para qual a entidade é mapeada.
@Column Indica que um atributo de uma classe é uma coluna de uma tabela.
@Id Indica que um atributo é a chave primária de uma entidade.
@namedQuery Define uma consulta.
@namedQueries Define várias consultas.
@UniqueConstraint Indica que uma propriedade não pode conter valores duplicados.
@Transient Indica que uma propriedade não deve ser persistida no banco de dados.
@Inheritance Define um relacionamento de herança à entidade.
@ManyToOne Mapeamento muitos para um (N:1).
@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).

Conforme vimos em aula, namedQuery define apenas uma consulta! A Anotação


namedQueries é quem define diversas consultas!

Gabarito: A

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 24 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE

Galera, Java começou a ficar extremamente popular em ambientes corporativos,


mas havia um problema que estava incomodando os desenvolvedores:
produtividade estava prejudicada porque eles estavam perdendo muito tempo nas
codificações de Queries SQL e em códigos JDBC. E quando era necessário mudar o
banco de dados por um de outro fabricante? O que fazer?

Além disso, Java ajudou a divulgar o Paradigma Orientado a Objetos, em que


informações eram representadas por meio de classes, atributos, herança,
polimorfismo, encapsulamento, etc. Isso gerava conflito com o Paradigma
Relacional dos bancos de dados, em que as informações eram representadas por
meio de tabelas, colunas, linhas, chaves primárias, chaves estrangeiras, etc.

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam
essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou
Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a
primeira, livre, open-source, tornou-se uma referência mundial3.

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de mapeamentos,
16712855225

como Descritores de Implantação (XML) ou Anotações (Annotations) –


principalmente para consultas e atualizações de dados. O desenvolvedor define
como os objetos são mapeados e o framework faz o resto.

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas


do banco de dados e o Hibernate faz todo o acesso ao banco, gerando inclusive o
código SQL necessário – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!

3
Hibernate tornou-se um framework tão popular que acabou por ser utilizado como referência para construção
da Especificação de Persistência Java (JPA). Apesar disso, ele também é oferecido para executar a mesma função
na plataforma .NET é o famoso NHibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 25 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Permite fazer uma persistência automática entre classes e tabelas, propriedades e


colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

OBSERVAÇÕES

O Mapeamento Objeto-Relacional (ORM) funciona com a transformação dos dados de um


objeto em uma tupla (linha) de uma tabela de um banco de dados, ou de forma inversa, com
a transformação de uma tupla (linha) da tabela em um objeto da aplicação – é um
relacionamento bidirecional.
Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a
oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Lembrando que o HQL é uma linguagem muito parecida com o SQL. No entanto,
comparado a este último, o HQL é totalmente orientado a objetos, e compreende
noções de herança, polimorfismo e associações. Dessa forma, ele se aproxima mais
das regras de negócio das aplicações, visto que essas também são escritas em geral
em um paradigma orientado a objetos.

Vocês percebem a diferença entre essas duas linguagens de consulta? SQL é uma
linguagem relacional e HQL é uma linguagem orientada a objetos. A sintaxe é
bastante parecida, inclusive existem várias cláusulas em comum, mas elas operam
sobre objetos persistentes e suas propriedades em vez de tabelas e colunas.
Bacana? Nice! ;-)

Christian Bauer afirma que o Hibernate é uma ferramenta que transforma os dados
16712855225

da estrutura lógica de um banco de dados em objetos definidos pel


desenvolvedor. Usando o Hibernate, não há a necessidade de escrever muito do
código de manipulação de banco de dados, pois ele utiliza HQL, acelerando a
velocidade do seu desenvolvimento de uma forma fantástica.

Ele continua por dizer que se pode mudar a qualquer momento o SGDB utilizado.
O framework não é uma boa ferramenta para aplicações que fazem uso extensivo
de stored procedures, triggers ou que implementam a maior parte da lógica da
aplicação no banco de dados, contando com um modelo de objetos simples - não
vai se beneficiar com o uso do Hibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 26 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Vocês sacaram? Ele é mais indicado para sistemas que contam com um modelo mais
rico, em que a maior parte da lógica de negócios fica na própria aplicação,
dependendo pouco de funções específicas do banco de dados. Ora, se a lógica de
negócio estiver no banco de dados, não faz muito sentido utilizar o Hibernate,
porque ele continuará manipulando o banco de dados diretamente.

OBSERVAÇÕES

Quando da utilização de Hibernate, não é proibitiva a utilização de SQL! Galera... vejam só: é
muito difícil trabalhar com dois paradigmas conceituais diferentes. Antigamente, perdia-se
muito tempo criando instruções SQL para transformar objetos em tuplas do banco de dados
- esse era um processo exaustivo e cheio de falhas. O Mapeamento Objeto-Relacional propõe
a transformação de classes e objetos em tabelas e tuplas de maneira fácil e reutilizável.

Em vez de o desenvolvedor criar todas as instruções SQL, ele pode utilizar um framework
sem sair do paradigma de orientação a objetos e de maneira transparente. Assim, todo
aquele trabalho árduo de codificação e testes se resume a algumas configurações e um
mínimo de código, sem manter um contato direto com o banco de dados. O Hibernate fornece
o papel de persistência, de forma praticamente transparente para o programador, i.e., ele
praticamente só usa anotações e interfaces!

Além do oferecer Mecanismos de ORM, o framework também pode trabalhar com


um sistema de cache das informações do banco de dados, aumentando ainda mais
a performance das aplicações. O esquema de cache é complexo e extensível,
existindo diversas implementações possíveis. Um recurso interessante é o Query
Cache, que permite fazer um cache das queries executadas diversas vezes.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 27 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE: ARQUITETURA

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma Camada de Persistência que
conecta os objetos da aplicação a uma base de dados relacional. As classes,
interfaces e outros componentes são definidos no pacote org.hibernate. Além disso,
existem três arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Qual a diferença entre eles, professor? O primeiro e o segundo executam a mesma


função, i.e., configurar um serviço hibernate. Se ambos estiverem configurados, o
primeiro sobrescreve o segundo. Ele contém informações sobre o local em que se
encontra o banco de dados; conexões, usuário, senha, propriedades; tipo de cache
utilizado; local onde se encontram os caminhos para os arquivos hbm.xml; etc:

<?xml version="1.0" encoding="UTF-8"?>


http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/banco_dados</property>
<property name="hibernate.connection.username">usuario</property>
<property name="hibernate.connection.password"/>senha</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
16712855225

<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.generate_statistics">true</property>
<mapping resource="classePOJO.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Observem também que ele configura a SessionFactory, que é a classe utilizada pelo
Hibernate para interagir com o banco de dados por meio de sessões. Por fim, o
arquivo hbm.xml é responsável por mapear o banco de dados, informando o nome
da tabela, tipo de dados, identificadores, entre outros – como pode ser visto
representado no código abaixo.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 28 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
<?xml version="1.0" encoding="UTF-8"?>
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="aplicacao.exemplo" table="tabela_exemplo">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"></generator>
</id>
<property column="nome" name="nome" length="50" type="java.lang.String"/>
<property column="email" name="email" length="50" type="java.lang.String"/>
<property column="data_nascimento" name="data_nascimento"
type="java.util.Date"/>
</class>
</hibernate-mapping>

Em outras palavras, o primeiro arquivo trata principalmente da interação com o


banco de dados. Já o segundo trata do mapeamento de classe do modelo de
domínio orientado a objetos para uma base de dados relacional. É uma boa prática
de programação criar um arquivo de mapeamento hbm.xml individuais para cada
classe de persistência4 e, então, referenciá-la e mapeá-la no cfg.xml.

Prosseguindo... há ainda uma forma de representar a arquitetura de maneira mais


ampla, conforme é apresentado na imagem acima! Observem que entre a Aplicação
e o Banco de Dados, temos uma camada de persistência do Hibernate (com seus
componentes – alguns opcionais) e temos uma camada de APIs (JNDI, JDBC e JTA).
16712855225

Vamos ver alguns desses componentes responsáveis por controlar transações:

 Session (org.hibernate.Session): trata-se de um objeto leve, single-threaded, de vida


curta que representa uma comunicação entre a aplicação e os objetos
persistentes, através de uma conexão JDBC. É criada por uma SessionFactory e é
instanciada cada vez que uma interação com o banco de dados for necessária.
É por meio dela que objetos persistentes são salvos e recuperados.

4
Classes Persistentes não precisam implementar interfaces ou herdar de uma classe-base especial!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 29 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 SessionFactory (org.hibernate.SessionFactory): trata-se de um objeto pesado, thread-safe


e imutável de coleções de mapeamentos objeto-relacional para um único banco
de dados – deve existir apenas uma instância na aplicação. É uma fábrica de
sessões e é necessário um SessionFactory por banco de dados utilizando um
arquivo de configuração separado – semelhante ao EntityManagerFactory do JPA.

 Transaction (org.hibernate.Transaction): trata-se de um objeto single-threaded de vida


curta utilizado por uma aplicação para especificar unidades indivisíveis e
atômicas de uma operação de manipulação de dados. Ele abstrai os detalhes de
transações de camadas inferiores, sendo opcional – o desenvolvedor escolhe se
o utiliza ou se gerencia transações em seu próprio código de aplicação.

 Configuration (org.hibernate.Configuration): trata-se de um objeto utilizado para realizar as


configurações de inicialização do Hibernate. Por meio dele, definem-se diversas
configurações (driver de banco, dialeto, etc) e, a partir de uma instância desse
objeto, indica-se como os mapeamentos entre classes e tabelas de banco de
dados devem ser realizados.

OBSERVAÇÕES

Classes Persistentes são aquelas que implementam as entidades de domínio de negócio! O


Hibernate trabalha associando cada tabela do banco de dados a um POJO (Plain Old Java
Object) – que nada mais é que um objeto simples que possui um construtor padrão sem
argumentos.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 30 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE: CICLO DE VIDA DA PERSISTÊNCIA

Agora vamos falar um pouco sobre os estados de um objeto no Hibernate! Nas


diversas aplicações existentes, sempre que for necessário propagar o estado de um
objeto que está em memória para o banco de dados ou vice-versa, há a necessidade
de que a aplicação interaja com uma camada de persistência. Isto é feito, invocando
o gerenciador de persistência e as interfaces de consultas do Hibernate.

Quando interagindo com o mecanismo de persistência, é necessário ter


16712855225

conhecimento sobre os estados do ciclo de vida. Em aplicações orientadas a objetos,


a persistência permite que um objeto continue a existir mesmo após a destruição
do processo que o criou. Na verdade, o que continua a existir é seu estado, já que
pode ser armazenado em disco e então ser recriado em um novo objeto.

Galera, um objeto de classes persistentes pode estar em um dos três diferentes


estados: Transiente (Transient), Persistente (Persistent) ou Desanexado (Detached), como
nós podemos ver representado na imagem acima! Bem, vamos falar agora um
pouquinho sobre cada um desses estados – eu recomendo que vocês entendam
bem o funcionamento:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 31 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 Transiente: a instância não esteve nem está associada a um contexto persistente,


isto é, não há uma representação no banco de dados, nem um valor
identificador. Ela é instanciada, utilizada, destruída e não pode ser reconstruída
de forma automática.

 Persistente: a instância está atualmente associada a um contexto persistente, isto


é, há uma representação no banco de dados e um valor identificador. Qualquer
mudança em um objeto nesse estado é detectada e sincronizada com a base de
dados.

 Desanexado: a instância foi associada a um contexto persistente5, no entanto


não está mais associada por alguma razão (Ex: Fim de sessão). Ainda existe uma
referência, o objeto ainda pode ser modificado e essas modificações podem
futuramente ser persistidas – trata-se de um estado intermediário.

O processo funciona assim: cria-se, inicialmente, o objeto POJO! Ele estará em


estado transiente, i.e., não foi persistido, não representa uma linha no banco de
dados e não está associado a uma sessão. Quando o objeto é salvo ou atualizado,
ele finalmente é persistido, i.e., representa uma linha no banco de dados e está
associado a uma única sessão.

Caso o objeto seja despejado, fechado ou o cache seja limpado, ele se torna
desanexado, i.e., ele tem uma entrada no banco de dados, porém não está
conectado a nenhuma sessão. Caso ele seja atualizado, salvo, atualizado ou
trancado, ele volta para o estado persistente. E se, depois disso, ele for deletado,
volta para o estado transiente.

16712855225

5
Contexto Persistente é outro nome para o objeto Session do Hibernate.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 32 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

HIBERNATE: ANOTAÇÕES E TIPOS DE MAPEAMENTO

Para finalizar, vamos falar um pouco sobre anotações! As anotações podem ser
definidas como metadados que aparecem no código fonte e são ignorados pelo
compilador. Qualquer símbolo em um código Java que comece com uma @ (arroba)
é uma anotação. Este recurso foi introduzido na linguagem Java a partir da versão
Java SE 5.0. As anotações mais comuns são:

ANOTAÇÃO DESCRIÇÃO

Utilizada para especificar detalhes da tabela que serão utilizados para persistir
entidades na base de dados. Caso essa anotação seja omitida, não resultará em
@Table erro, porém será utilizado o nome da classe como valor default. Dessa forma,
apenas definimos a anotação se quisermos sobrescrever o nome da classe.
Possui os atributos: name, catalog, schema.
Utilizada para especificar qual propriedade da tabela será a identificadora, isto
é, será a chave primária. Pode ser um campo único ou a combinação de múltiplos
@Id campos dependendo da estrutura da tabela.

Utilizada para especificar detalhes da coluna para o qual um campo ou


propriedade será mapeado. Pode-se utilizar essa anotação com os atributos:
@Column name, length, nullable e unique.

Utilizada para marcar uma classe como uma Entidade ou POJO. Deve conter um
construtor sem argumentos que seja visível com o menor escopo de proteção.
16712855225

@Entity

Em outras palavras, as anotações marcam partes de objetos de forma que tenham


algum significado especial. Quanto ao mapeamento, devemos ter alguns cuidados
especiais com seus tipos! Como assim, professor? Quando preparamos um
documento de mapeamento de tipos, nós mapeamos tipos de dados Java para tipos
de dados usados em bases de dados relacionais.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 33 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Os tipos declarados e utilizados nos arquivos de mapeamento não são tipos de


dados Java nem tipos de dados SQL – eles são denominados Tipos Hibernate e
podem traduzir do Java para SQL e vice-versa. Entenderam bem? Eles podem até
ter nomes parecidos, mas não são iguais (Hibernate: float; Java: Float; SQL: FLOAT).
Vejamos a tabela abaixo com os tipos primitivos:

Tipo de Mapeamento Tipo Java Tipo SQL


integer int or java.lang.Integer INTEGER
long long or java.lang.Long BIGINT
short short or java.lang.Short SMALLINT
float float or java.lang.Float FLOAT
double double or java.lang.Double DOUBLE
big_decimal java.math.BigDecimal NUMERIC
character java.lang.String CHAR(1)
string java.lang.String VARCHAR
byte byte or java.lang.Byte TINYINT
boolean boolean or java.lang.Boolean BIT
yes/no boolean or java.lang.Boolean CHAR(1) ('Y' or 'N')
true/false boolean or java.lang.Boolean CHAR(1) ('T' or 'F')

Vamos ver um exemplo de uma Tabela EMPREGADO:

create table EMPREGADO (


id INT NOT NULL auto_increment,
primeiro_nome VARCHAR(20) default NULL,
ultimo_nome VARCHAR(20) default NULL,
salario INT default NULL,
PRIMARY KEY (id)
);

Abaixo podemos ver o mapeamento da Classe Empregado com anotações para


16712855225

mapear objetos definidos na tabela EMPREGADO:

import javax.persistence.*;

@Entity
@Table(name = "EMPREGADO")
public class Empregado {
@Id @GeneratedValue
@Column(name = "id")
private int id;

@Column(name = "primeiro_nome")
private String primeiroNome;

@Column(name = "ultimo_nome")
private String ultimoNome;

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 34 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

@Column(name = "salario")
private int salario;

public Empregado() {}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getPrimeiroNome() {
return primeitoNome;
}
public void setPrimeiroNome( String primeiro_nome) {
this.primeiroNome= primeiro_nome;
}
public String getUlitmoNome() {
return ultimoNome;
}
public void setUltimoNome( String ultimo_nome) {
this.ultimoNome = ultimo_nome;
}
public int getSalario() {
return salario;
}
public void setSalario( int salario) {
this.salario = salario;
}
}

Agora vamos analisar as anotações! O Hibernate detecta a anotação @Id em um


campo, assume que ele deve ser uma chave primária e deverá acessar as
propriedades de um objeto diretamente através desse campo em tempo de
execução. Se colocássemos essa anotação no método getId( ), permitiríamos o acesso
às propriedades através de métodos getters e setters.

Da mesma forma, todas as outras anotações também são colocadas em campos ou


métodos, dependendo da estratégia adotada. A anotação @Entity marca a classe
como um POJO, já a anotação @Table especifica detalhes da tabela que será
persistida, isto é, seu nome será “EMPREGADO”. A anotação @GeneratedValue
16712855225

determina a chave primária mais apropriada em termos de portabilidade.

Galera, vamos falar agora rapidamente também sobre as associações! O termo


associação é utilizado para se referir aos relacionamentos entre as entidades. Os
relacionamentos 1-para-1 (um-para-um), 1-para-n (um-para-muitos) e n-para-n
(muitos-para-muitos) são os mais comuns entre as entidades de um banco de
dados. Bacana?

O relacionamento um-para- -1) é bem simples de entender. Basta verificar


relação noivo e noiva. Ora, um noivo só possui uma noiva e uma noiva só possui

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 35 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

um noivo. Outro exemplo: um número de identidade só se refere a uma pessoa e


uma pessoa só tem um número de identidade. Tranquilo de entender, não é? A
anotação utilizada para esse mapeamento é @OneToOne.

O relacionamento um-para-muitos (1-n) é bem simples de entender. Basta verificar


a relação entre time de futebol e jogador . Ora, um time de futebol tem vários
jogadores, mas um jogador só joga em um time de futebol. Outro exemplo: um
órgão tem vários servidores, mas um servidor pertence a um único órgão. Tranquilo
de entender, não é? A anotação utilizada para esse mapeamento é @OneToMany.

O relacionamento muitos-para-muitos (n-n) é também bem fácil de entender. Basta


verificar a relação entre times de futebol e campeonatos de futebol. Ora, um time
de futebol joga vários campeonatos e um campeonato contém vários times de
futebol. Tranquilo de entender, não é? A anotação utilizada para esse mapeamento
é @ManyToMany. Certinho?

Galera, a operação simples de acessar uma base de dados é uma operação muito
custosa, mesmo quando se trata de uma simples consulta. Aliás, uma simples
consulta, por exemplo, envolve uma requisição para o servidor, o banco de dados
deve compilar essa consulta, rodar e retornar um resultado que por sua vez será
retornado ao cliente.

A maioria das bases de dados utilizam caches para os resultados de uma consulta,
caso essas consultas são executadas inúmeras vezes. Dessa forma, elimina-se o
overhear de I/O do disco e tempo de compilação da consulta. No entanto, isso terá
pouco valor caso exista um grande número de clientes fazendo diferentes
solicitações.

Além disso, mesmo quando temos um cache para os resultados, isso não elimina o
16712855225

tempo que levamos para transmitir a informação na rede, que é considerada a parte
mais relevante do atraso. Algumas aplicações são capazes de tirar vantagens de
aplicações contidas na própria base de dados, mas isso é uma exceção e tais bases
de dados possuem suas limitações.

Em vez disso, o mais apropriado é termos uma cache no cliente final que faz a
conexão com a base de dados. Isto não é provido ou suportado diretamente pela
API JDBC, mas o Hibernate provê uma cache de nível um, também chamado de L1
ou simplesmente de cache, através da qual todas as requisições devem passar. Uma
cache de segundo nível é opcional e configurável.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 36 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

A cache de nível um (L1) garante que dentro de uma session, requisições para um
dado objeto da base de dados retornará sempre a mesma instância do objeto,
prevenindo assim que um mesmo objeto seja carregado múltiplas vezes pelo
Hibernate ou que a informação entre em conflito. Sobre esse assunto, é isso que
vocês precisam saber.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 37 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas No Hibernate,


apenas a linguagem de consulta HQL (Hibernate Query Language) pode ser
utilizada. A HQL executa os pedidos SQL sobre as classes de persistência do Java
em vez de tabelas no banco de dados, o que diminui a distância entre o
desenvolvimento das regras de negócio e o banco de dados.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Lembrando que o HQL é uma linguagem muito parecida com o SQL. No entanto,
comparado a este último, o HQL é totalmente orientado a objetos, e compreende
noções de herança, polimorfismo e associações. Dessa forma, ele se aproxima mais
das regras de negócio das aplicações, visto que essas também são escritas em geral
em um paradigma orientado a objetos.

Conforme vimos em aula, pode-se utilizar SQL e Criteria Query API. A segunda parte
afirma que o HQL atua sobre o modelo orientado a objetos em vez do modelo
relacional, logo ele diminui a distância entre o desenvolvimento de regras de
16712855225

negócio e o banco de dados, porque – em geral – as regras de negócio são escritas


seguindo o paradigma orientado a objetos.

Gabarito: E

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


O Hibernate, um framework de mapeamento objeto relacional (ORM), cria uma
camada persistência na solução desenvolvida, o que permite ligar os objetos aos
bancos de dados relacionais. Entre seus serviços, o Hibernate provê um meio de
se controlar transações, por meio de métodos de suas interfaces session e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 38 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

transaction, tendo ainda suporte a herança e polimorfismo. É distribuído sob a


licença LGPL, o que permite seu uso em projetos comerciais ou open source.

Comentários:

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma camada de persistência que
conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces
e outros componentes são definidos no pacote org.hibernate. Além disso, existem três
arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Prosseguindo... há ainda uma forma de representar a arquitetura de maneira mais


ampla, conforme é apresentado na imagem acima! Observem que entre a Aplicação
e o Banco de Dados, temos uma camada de persistência do Hibernate (com seus
componentes – alguns opcionais) e temos uma camada de APIs (JNDI, JDBC e JTA).
Vamos ver alguns desses componentes responsáveis por controlar transações:

Conforme vimos em aula, cria-se de fato uma camada de persistência, que contém
componentes que controlam as transações com o banco de dados.

Gabarito: C

(CESPE - 2010 - TCU - Auditor Federal de Controle Externo - Tecnologia da


Informação - Parte II

Uma equipe de desenvolvimento de software recebeu a incumbência de desenvolver um sistema com as


características apresentadas a seguir.

 O sistema deverá ser integrado, interoperável, portável e seguro.


16712855225

 O sistema deverá apoiar tanto o processamento online, quanto o suporte a decisão e gestão de
conteúdos.
 O sistema deverá ser embasado na plataforma JEE (Java enterprise edition) v.6, envolvendo servlets,
JSP (Java server pages), Ajax, JSF (Java server faces) 2.0, Hibernate 3.5, SOA e web services.

O líder da equipe iniciou, então, um extenso processo de coleta de dados com o objetivo de identificar as
condições limitantes da solução a ser desenvolvida e tomar decisões arquiteturais e tecnológicas que
impactarão várias características funcionais e não funcionais do sistema, ao longo de seu ciclo de vida. A
partir dessa coleta, o líder deverá apresentar à equipe um conjunto de informações e de decisões.

A tecnologia Hibernate 3.5 é apropriada para o sistema a ser desenvolvido: entre as


características que a credenciam, está o fato de ela possibilitar a recuperação de

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 39 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

objetos por meio da formulação de queries em linguagens HQL (hibernate query


language) e SQL (structured query language), bem como pelo uso de APIs
(application programming interfaces) de busca por critério, entre outras.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, está perfeito! Vocês já notaram que isso cai bastante, né?!

Gabarito: C

( SPE - - CEHAP- - Programador de computador No framework


Hibernate, é comum que uma instância de uma classe persistente tenha três
estados específicos. Assinale a opção que contém esses três estados.

a) plugged, disconnected, timewait


b) connected, disconnected, detached
c) transient, persistent, detached
d) transient, connected, timewait

Comentários:

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 40 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, trata-se do Transient, Persistent e Detached.

Gabarito: C

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas O Hibernate, framework


utilizado no desenvolvimento de consultas e atualização de dados em um banco
relacional, foi criado para facilitar a integração entre programas em Java,
funcionando também em ambientes .Net (NHibernate).

Comentários:

Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por
ser utilizado como referência para construção da Especificação de Persistência Java
(JPA). Apesar disso, ele também é oferecido para executar a mesma função na
plataforma .NET – é o famoso NHibernate.

Conforme vimos em aula, está perfeito (com uma ressalva)! Ele não foi criado com
o intuito de facilitar a integração entre Aplicações Java – não faz sentido! Ele foi
criado com o intuito de facilitar a integração entre Aplicações Java e Bancos de
Dados Relacionais, fazendo o mapeamento entre ambos os paradigmas. Bacana?

Gabarito: C

(CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas -


Desenvolvimento de Sistemas No Hibernate, o recurso Query Cache possibilita
fazer o cache de queries que são executadas várias vezes.

Comentários: 16712855225

Além do oferecer Mecanismos de ORM, o framework também pode trabalhar com


um sistema de cache das informações do banco de dados, aumentando ainda mais
a performance das aplicações. O esquema de cache é complexo e extensível, existindo
diversas implementações possíveis. Um recurso interessante é o Query Cache, que
permite fazer um cache das queries executadas diversas vezes.

Conforme vimos em aula, a questão está perfeita!

Gabarito: C

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 41 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas No Hibernate, caso o nome da classe seja diferente
do nome da tabela mapeada, é necessário informar, na anotação @Table, o
nome da tabela, por meio do atributo name.

Comentários:

ANOTAÇÃO DESCRIÇÃO
Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na
base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado
@Table
o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos
sobrescrever o nome da classe. Possui os atributos: name, catalog, schema.

Conforme vimos em aula, é exatamente isso! Sobrescreve-se o nome da tabela por


meio do atributo name.

Gabarito: C

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Em


Hibernate, a configuração de conexões de banco de dados deve ser feita
somente por meio do uso de arquivo de propriedade.

Comentários:

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma camada de persistência que
conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces
e outros componentes são definidos no pacote org.hibernate. Além disso, existem três
arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.
16712855225

Qual a diferença entre eles, professor? O primeiro e o segundo executam a mesma


função, i.e., configurar um serviço hibernate. Se ambos estiverem configurados, o
primeiro sobrescreve o segundo. Ele contém informações sobre o local em que se
encontra o banco de dados; conexões, usuário, senha, propriedades; tipo de cache
utilizado; local onde se encontram os caminhos para os arquivos hbm.xml; etc:

Conforme vimos em aula, pode ser feito por meio do arquivo de propriedades
(hibernate.properties) ou arquivo de configuração (hibernate.cfg.xml).

Gabarito: E

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 42 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2014 - SUFRAMA - Analista de Sistemas) De acordo com o mapeamento


mostrado abaixo, no Hibernate, a coluna Evento_ID manterá a chave primária da
tabela Eventos.

<hibernate-mappingpackage=
"org.hibernate.tutorial.domain">
<class name="Evento" table="Eventos">
<id name="id" column="Evento_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

Comentários:

ANOTAÇÃO DESCRIÇÃO

Utilizada para especificar detalhes da tabela que serão utilizados para persistir entidades na
base de dados. Caso essa anotação seja omitida, não resultará em erro, porém será utilizado
@Table
o nome da classe como valor default. Dessa forma, apenas definimos a anotação se quisermos
sobrescrever o nome da classe. Possui os atributos: name, catalog, schema.
Utilizada para especificar qual propriedade da tabela será a identificadora, isto é, será a chave
primária. Pode ser um campo único ou a combinação de múltiplos campos dependendo da
@Id
estrutura da tabela.

Utilizada para especificar detalhes da coluna para o qual um campo ou propriedade será
mapeado. Pode-se utilizar essa anotação com os atributos: name, length, nullable e unique.
@Column

Utilizada para marcar uma classe como uma Entidade ou POJO. Deve conter um construtor
sem argumentos que seja visível com o menor escopo de proteção.
@Entity 16712855225

Conforme vimos em aula, houve o mapeamento da classe Evento para a Tabela


Eventos, cujo atributo identificador “id” será a coluna “Evento_ID”.

Gabarito: C

10. (CESPE - 2010 - TRE-BA - Programador de computador O Hibernate, um


framework para o mapeamento objeto-relacional, é escrito na linguagem Java e,
por isso, somente pode ser executado no ambiente Java.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 43 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:

Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por
ser utilizado como referência para construção da Especificação de Persistência Java
(JPA). Apesar disso, ele também é oferecido para executar a mesma função na
plataforma .NET – é o famoso NHibernate.

Conforme vimos em aula, ele também pode ser executado em ambiente .NET.

Gabarito: E

11. (CESPE - 2013 - MPOG - Técnico de Nível Superior - - Categoria Profissional


7 Quando se desenvolve um mapeamento com Hibernate, uma classe
persistente criada não precisa implementar ou herdar qualquer classe especial
do framework Hibernate.

Comentários:

Nota de Rodapé: Classes Persistentes não precisam implementar interfaces ou herdar


de uma classe-base especial!

Conforme vimos em aula, classes persistentes não precisam implementar interfaces


ou herdar uma classe-base especial.

Gabarito: C

12. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) O objeto Session Factory do Hibernate mantém o
mapeamento objeto relacional na sessão.16712855225

Comentários:

 SessionFactory (org.hibernate.SessionFactory): trata-se de um objeto pesado, thread-safe e


imutável de coleções de mapeamentos objeto-relacional para um único banco de
dados – deve existir apenas uma instância na aplicação. É uma fábrica de sessões
e é necessário um SessionFactory por banco de dados utilizando um arquivo de
configuração separado – semelhante ao EntityManagerFactory do JPA.

Conforme vimos em aula, é na sessão que se mantém o mapeamento objeto-


relacional.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 44 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Gabarito: C

13. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) A Interface Criteria do Hibernate é utilizada para
realizar consultas ao banco de dados.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, Criteria Query API é – sim – utilizada para consultas em
bancos de dados.

Gabarito: C

14. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) Os tipos de mapeamento do


Hibernate são considerados tipos de dados SQL e precisam de conversão para
dados Java nas respectivas classes Java.

Comentários:

Os tipos declarados e utilizados nos arquivos de mapeamento não são tipos de dados
Java nem tipos de dados SQL – eles são denominados Tipos Hibernate e podem
traduzir do Java para SQL e vice-versa. Entenderam bem? Eles podem até ter nomes
16712855225

parecidos, mas não são iguais (Hibernate: date; Java: Date; SQL: DATE). Vejamos a tabela
abaixo:

Conforme vimos em aula, os tipos de mapeamento não são tipos SQL, muito menos
Java – são Tipos Hibernate!

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 45 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da


Informação Linguagem de queries, fornecida pelo Hibernate, que é similar em
aparência ao SQL e que, no entanto, é orientada a objeto e compreende noções
como herança, polimorfismo e associação. Trata-se de:

a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, trata-se do HQL!

Gabarito: D
16712855225

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação Os três estados de objeto definidos pelo framework Hibernate são:

a) Temporário (Temporary), Permanente (Permanent) e Resiliente (Resilient).


b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient).
c) Temporário (Temporary), Persistente (Persistent) e Destacado (Detached).
d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached).
e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient).

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 46 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, trata-se do Transiente, Persistente e Destacado.

Gabarito: D

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) Com


relação ao framework Hibernate é correto afirmar:

a) Permite fazer a persistência automatizada dos objetos em uma aplicação Java


para as tabelas de um banco de dados relacional, utilizando metadados
(descrição dos dados) que descrevem o mapeamento entre os objetos e o banco
de dados.

b) É uma boa opção apenas para sistemas que fazem muito uso de stored
procedures, triggers ou que implementam a maior parte da lógica da aplicação
16712855225

no banco de dados vai se beneficiar mais com o uso do Hibernate.

c) Permite enviar unidirecionalmente uma representação de dados de um banco


de dados relacional para um modelo de objeto utilizando um esquema baseado
exclusivamente em Hibernate Query Language (HQL).

d) A Java Persistence API (JPA) implementa o Hibernate, que é parte do


Enterprise JavaBeans 4.0.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 47 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

e) Em uma aplicação criada com Hibernate, para cada classe de persistência é


necessário criar um arquivo de mapeamento XML que deve ser salvo
obrigatoriamente com o nome da classe seguido pelo sufixo .map.xml.

Comentários:

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do


banco de dados e o Hibernate faz todo o acesso ao banco, gerando inclusive os
comandos SQL necessários – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!
Permite fazer uma persistência automática entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de mapeamentos,
como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente
para consultas e atualizações de dados. O desenvolvedor define como os objetos são
mapeados e o framework faz o resto!

(a) Conforme vimos em aula, tudo está perfeito!

Ele continua por dizer que vale lembrar que se pode mudar a qualquer momento o
SGDB utilizado. O framework não é uma boa ferramenta para aplicações que fazem
uso extensivo de stored procedures, triggers ou que implementam a maior parte da
lógica da aplicação no banco de dados, contando com um modelo de objetos simples
- não vai se beneficiar com o uso do Hibernate.

(b) Conforme vimos em aula, esses não irão se beneficiar!

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


16712855225

oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate


Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

(c) Conforme vimos em aula, não é exclusivamente HQL – há ainda HQL e Criteria.
Ademais, é uma relação bidirecional!

Nota de Rodapé: Hibernate tornou-se um framework tão popular que acabou por
ser utilizado como referência para construção da Especificação de Persistência Java

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 48 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(JPA). Apesar disso, ele também é oferecido para executar a mesma função na
plataforma .NET – é o famoso NHibernate.

(d) Conforme vimos em aula, Hibernate implementa JPA (e, não, o contrário)!

Em outras palavras, o primeiro arquivo trata principalmente da interação com o


banco de dados. Já o segundo trata do mapeamento de classe do modelo de domínio
orientado a objetos para uma base de dados relacional. É uma boa prática de
programação criar um arquivo de mapeamento hbm.xml individuais para cada classe
de persistência e, então, referenciá-la e mapeá-la no cfg.xml.

(e) Conforme vimos em aula, pode-se usar annotations. Ademais, o sufixo seria
hbm.xml.

Gabarito: A

(FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da


Informação) Hibernate é um framework:

a) que separa as funções que envolvem a construção de aplicações Web, através


da associação dos eventos do lado cliente com os manipuladores dos eventos
do lado do servidor.

b) pelo qual o programador utiliza a infraestrutura do servidor de aplicação


voltada para o desenvolvimento de aplicações de missão crítica e de aplicações
empresariais em geral.

c) no qual as questões de infraestrutura, segurança, disponibilidade e


escalabilidade são responsabilidade do servidor de aplicações, permitindo que o
16712855225

programador se concentre, apenas, nas necessidades do negócio do cliente.

d) que permite ao desenvolvedor de páginas para internet produzir aplicações


que acessem o banco de dados, manipulem arquivos no formato texto e
capturem informações a partir de formulários.

e) cujo objetivo é diminuir a complexidade entre os programas Java que


precisam trabalhar com um banco de dados do modelo relacional.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 49 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

O trabalho do desenvolvedor é definir como os objetos são mapeados nas tabelas do


banco de dados e o Hibernate faz todo o acesso ao banco, gerando inclusive os
comandos SQL necessários – não é necessário fazer SELECT, UPDATE, INSERT, DELETE, etc!
Permite fazer uma persistência automática entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos Java e tipos SQL, entre outros.

(e) Conforme vimos em aula, seu objetivo é fazer um mapeamento para persistência
automática – reduzindo a complexidade entre programas que precisam trabalhar
com o modelo relacional.

Gabarito: E

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Sendo


um grupo de classes e componentes responsáveis pelo armazenamento e
recuperação de dados, esta camada inclui necessariamente um modelo das
entidades do domínio de negócios (mesmo que seja somente um modelo de
metadados). No âmbito do mapeamento objeto-relacional (hibernate) esta é a
camada de:

a) negócio.
b) restrição.
c) apresentação.
d) consistência.
e) persistência.

Comentários:

A imagem abaixo mostra de maneira absurdamente abstrata uma sugestão de


arquitetura em que o Hibernate funciona como uma Camada de Persistência que
16712855225

conecta os objetos da aplicação a uma base de dados relacional. As classes, interfaces


e outros componentes são definidos no pacote org.hibernate. Além disso, existem três
arquivos de configuração: hibernate.cfg.xml, hibernate.properties e hbm.xml.

Conforme vimos em aula, a camada responsável pelo armazenamento e


recuperação de dados é a Camada de Persistência.

Gabarito: E

(FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas)


Objetos que têm uma representação no banco de dados, mas não fazem mais

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 50 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

parte de uma sessão do Hibernate, o que significa que o seu estado pode não
estar mais sincronizado com o banco de dados, são do tipo:

a) transient.
b) detached.
c) attached.
d) persistent.
e) consistent.

Comentários:

Galera, um objeto de classes persistentes pode estar em um dos três diferentes


estados: Transiente (Transient), Persistente (Persistent) ou Desanexado (Detached), como
nós podemos ver representado na imagem acima! Bem, vamos falar agora um
pouquinho sobre cada um desses estados – eu recomendo que vocês entendam bem
o funcionamento:

 Transiente: a instância não esteve nem está associada a um contexto persistente,


isto é, não há uma representação no banco de dados, nem um valor identificador.
Ela é instanciada, utilizada, destruída e não pode ser reconstruída de forma
automática.

 Persistente: a instância está atualmente associada a um contexto persistente, isto


é, há uma representação no banco de dados e um valor identificador. Qualquer
mudança em um objeto nesse estado é detectada e sincronizada com a base de
dados.

 Desanexado: a instância foi associada a um contexto persistente, no entanto não


está mais associada por alguma razão (Ex: Fim de sessão). Ainda existe uma
16712855225

referência, o objeto ainda pode ser modificado e essas modificações podem


futuramente ser persistidas – trata-se de um estado intermediário.

Conforme vimos em aula, trata-se do Tipo Detached (Desanexado)!

Gabarito: B

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação) Em sua essência, o Hibernate é um framework para:

a) mapeamento objeto-relacional (ORM).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 51 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

b) desenvolvimento de aplicações de Internet rica (Rich Internet Application -


RIA).

c) implementação da camada Controller do padrão MVC (Model - View -


Controller).

d) construção de aplicações utilizando-se inversão de controle (IoC).

e) injeção de dependência (dependency injection) em aplicativos.

Comentários:

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam
essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou
Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a
primeira, livre, open-source, tornou-se uma referência mundial.

Conforme vimos em aula, trata-se de um framework para mapeamento objeto-


relacional.

Gabarito: A

(FCC - 2012 - TRF - REGIÃO - Técnico Judiciário - Informática) Quando se cria


uma aplicação Java utilizando um recurso de Mapeamento Objeto-Relacional
como o Hibernate, o mapeamento entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos do Java e tipos do SQL, é feito
através de metadados. Esses metadados normalmente podem ser colocados em
16712855225

arquivos XML ou diretamente nas classes, próximos da informação que eles


descrevem. Quando são colocados nas classes, esses metadados são conhecidos
como:

a) mappings.
b) annotations.
c) descriptions.
d) patterns.
e) actions.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 52 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Essas ferramentas facilitam o mapeamento dos atributos de uma base de dados


relacional para o modelo de objetos de uma aplicação por meio de mapeamentos,
como Descritores de Implantação (XML) ou Anotações (Annotations) – principalmente
para consultas e atualizações de dados. O desenvolvedor define como os objetos são
mapeados e o framework faz o resto.

Conforme vimos em aula, trata-se de Annotations!

Gabarito: B

(FCC - 2008 – TRF5 - Analista de Sistemas) Usando o Hibernate, as pesquisas


podem ser realizadas em bancos de dados por meio de:

a) HQL, apenas.
b) Criteria Query API, apenas.
c) Criteria Query API e HQL, apenas.
d) Criteria Query API e SQL, apenas.
e) Criteria Query API, HQL e SQL.

Comentários:

Quando utilizamos o Hibernate para realizar consultas no banco de dados, temos a


oportunidade de trabalhar com SQL (Structured Query Language), HQL (Hibernate
Query Language) e com Criteria Query API. Esta última fornece uma maneira
elegante de construção de queries dinâmicas para consultas no banco de dados. A
API é uma alternativa às Consultas HQL e também ao SQL tradicional.

Conforme vimos em aula, trata-se do Criteria Query API, HQL e SQL.


16712855225

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 53 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CONSULPLAN - 2012 - TSE - Analista Judiciário - Análise de Sistemas) Por suas


características, Hibernate 3.5 constitui uma ferramenta com a finalidade de
realizar o seguinte tipo de mapeamento:

a) objeto/relacional para Java.


b) gerencial/operacional para sites interativos textuais.
c) entidade/relacionamento para modelagem de dados.
d) lógico/físico para desenvolvimento por meio da prototipação.

Comentários:

Pois bem! Era trabalhoso transformar objetos de uma classe em registros de uma
tabela e vice-versa. Logo, começaram a surgir alguns frameworks que auxiliavam
essa tarefa – são as famosas Ferramentas de ORM – Object-Relational Mapping (ou
Mapeamento Objeto-Relacional). As mais conhecidas eram Hibernate e TopLink – a
primeira, livre, open-source, tornou-se uma referência mundial.

Conforme vimos em aula, trata-se de um mapeamento objeto-relacional em Java.

Gabarito: A

ACERTEI 16712855225
ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 54 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JAVA DATABASE CONECTIVITY (JDBC)

De acordo com a documentação oficial: trata-se de uma API que fornece acesso
universal a dados a partir da linguagem de programação Java. É possível acessar
praticamente qualquer fonte de dados, desde bancos de dados relacionais a
planilhas ou arquivos simples. O JDBC também fornece uma base comum sobre a
quais ferramentas e interfaces alternativas podem ser construídas.

Ele estabelece conexões com um banco de dados, envia comandos SQL e processa
os resultados. Aliás, com a utilização de JDBC, torna-se fácil enviar um comando
SQL para diferentes bancos de dados relacionais. Em outras palavras, não é
necessário escrever um programa para acessar um banco de dados Oracle, outro
para acessar um banco de dados SQL Server, e assim por diante.

Essa tecnologia permite invocar comandos SQL a partir de métodos em classes Java.
Ela fornece uma API do tipo call-level para acesso a bancos de dados baseado em
SQL. Os componentes dessa API estão localizados nos pacotes java.sql e javax.sql. Para
conseguir acesso a diversos bancos de dados diferentes de maneira uniforme e
padronizada, utilizam-se Drivers.

Como assim, professor? O Driver faz a interface entre a Aplicação Web e o SGBD!
Para eu me conectar a um banco de dados individual, eu preciso ter os drivers para
aquele banco de dados específico. O JDBC permite a conexão com praticamente
qualquer SGBD (Oracle, DB2, SQL Server, MySQL, PostgreSQL, etc). Existem,
atualmente, quatro tipos de Drivers:

 JDBC-ODBC Bridge: É o tipo mais simples. Utiliza ODBC para conectar-se com o
16712855225

banco de dados, convertendo métodos JDBC em chamadas às funções do


ODBC. Esta ponte é normalmente usada quando não há um driver puro-Java
para determinado banco de dados, pois seu uso é desencorajado devido à
dependência de plataforma.

 Native API: converte chamadas JDBC na API do cliente em chamadas para o


SGBD Oracle, Sybase, Informix, etc. São escritos parcialmente em Java e
parcialmente em código nativo. Requer que algum código binário específico do
SO seja carregado em cada máquina cliente e usa uma biblioteca nativa
específica no cliente para a fonte de dados para que eles se conectem.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 55 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 Network Protocol: traduz chamadas JDBC em um protocolo de rede


independente do SGBD, que é então convertido para um protocolo específico
do SGBD por um middleware. Em geral, esta é a alternativa JDBC mais flexível de
todas, em que fornecedores disponibilizam produtos adequados para uso na
internet.

 Database Protocol: permite chamada direta da máquina do cliente para o


Servidor SGBD. Converte as chamadas JDBC diretamente no protocolo do banco
de dados. Implementado em Java, normalmente é independente de plataforma
e escrito pelos próprios desenvolvedores. É o tipo mais recomendado para ser
usado.

Open Database Connectivity (ODBC) é um padrão aberto desenvolvido para que


linguagens de programação ou sistemas operacionais se comuniquem com bancos
de dados de maneira independente de plataforma. O JDBC utiliza um driver
específico para banco de dados; o ODBC utiliza sempre o mesmo Driver e depois
configuram-se as propriedades do sistema para acessar determinado banco.

Dado que foi utilizado o driver adequado para acesso ao banco de dados, pode-se
utilizar a classe Connection para estabelecer a conexão, de fato, com o banco. Essa
classe se encontra no pacote java.sql – que contém uma biblioteca para acesso e
processamento de dados em uma fonte de dados. As classes, métodos e interfaces
dele mais importantes são:

 Driver: interface pública abstrata que todo driver deve implementar para
executar instruções SQL.

 DriverManager: classe que contém o registro de cada driver, oferecendo


métodos estáticos para gerenciá-los.
16712855225

 Connection: interface que representa uma conexão com o banco de dados –


possui diversos métodos importantes.

 Statement: interface pública abstrata que é utilizada para executar instruções


SQL estáticas e obter os resultados de sua execução.

 ResultSet: essa interface é uma tabela de dados que representa o resultado


de uma instrução SQL em um banco de dados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 56 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

 PreparedStatement: interface pública abstrata utilizada para estender a


interface Statement e criar um objeto que represente uma instrução SQL.

 CallableStatement: interface que permite executar funções ou procedimentos


armazenados no banco.

try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance();

Connection con =
DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha");
}
catch(SQLException e)
{ // Se o carregador não localizar o driver do banco para conexão, lança a
// exceção java.lang.ClassNotFoundExeption
e.printStackTrace();
}

Para acessar um banco de dados, o primeiro passo é estabelecer uma conexão! É


possível fazer isso em duas etapas: primeiro, carrega-se o driver do banco de dados.
Uma vez carregado, o driver se registra para o DriverManager e está disponível para
a aplicação. Então usa-se o DriverManager para abrir uma conexão com o banco
de dados. A interface Connection designa um objeto con para receber a conexão.

Statement stm = con.createStatement();


String SQL = "Select coluna1, coluna2, coluna3 from TabelaX";

Estabelecida a conexão, podemos executar comandos SQL no banco de dados. Para


realizar uma operação, podemos usar três interfaces. A primeira delas é a interface
Statement, que permite a execução dos comandos fundamentais de SQL (SELECT,
INSERT, UPDATE ou DELETE). A interface PreparedStatement nos permite usufruir
de SQL armazenado ou pré-compilado no banco.
16712855225

ResultSet rs = stm.executeQuery(SQL);

A terceira interface é CallableStatement, e permite executar procedimentos e


funções armazenados no banco (quando o banco suportar este recurso). A interface
ResultSet permite colher os resultados da execução de nossa query no banco de
dados. Esta interface apresenta uma série de métodos para prover o acesso aos
dados. Depois é só encerrar o acesso, liberando recursos.

finally
{
try
{

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 57 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
con.close();
}
catch(SQLException onConClose)
{
System.out.println("ERRO NO FECHAMENTO DA CONEXÃO");
onConClose.printStackTrace();
}
}

Podemos fazer isso fechando o Statement, que libera os recursos associados à


execução desta consulta, mas deixa a conexão aberta para a execução de uma
próxima consulta; ou fechando diretamente a conexão, que encerra a comunicação
com o banco de dados. Para termos certeza de que vamos encerrar esta conexão
mesmo que uma exceção ocorra, reservamos o fechamento para a cláusula finally().

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 58 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FCC – – BACEN – Analista de Sistemas) O estabelecimento de conexão


entre um aplicativo Java e um banco de dados, para processar instruções SQL
de consulta e atualização, é possibilitado por meio do padrão aberto,
desenvolvido pela Microsoft, denominado:

a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.

Comentários:

Open Database Connectivity (ODBC) é um padrão aberto desenvolvido para que


linguagens de programação ou sistemas operacionais se comuniquem com bancos
de dados de maneira independente de plataforma. O JDBC utiliza um driver específico
para banco de dados; o ODBC utiliza sempre o mesmo Driver e depois configuram-
se as propriedades do sistema para acessar determinado banco.

Conforme vimos em aula, trata-se do ODBC.

16712855225
Gabarito: B

(CESPE – – IPEA – Analista de Sistemas) O JDBC é usado, entre outras


coisas, para acesso a bancos de dados sem SQL, por meio de Java.

Comentários:

De acordo com a documentação oficial: trata-se de uma API que fornece acesso
universal a dados a partir da linguagem de programação Java. É possível acessar
praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas
ou arquivos simples. O JDBC também fornece uma base comum sobre a quais
ferramentas e interfaces alternativas podem ser construídas.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 59 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Conforme vimos em aula, ele pode acessar praticamente qualquer coisa.

Gabarito: C

(FCC - - TRT - 2ª REGIÃO (SP) - Analista Judiciário - Tecnologia da


Informação A utilização de JDBC, em um programa Java, inicia com a indicação
do pacote que contém a JDBC API pela declaração:

a) import java.awt.*;
b) import java.util.*;
c) import java.sql.*;
d) import java.swing.*;
e) import java.jdbc.*;

Comentários:

Essa tecnologia permite invocar comandos SQL a partir de métodos em classes Java.
Ela fornece uma API do tipo call-level para acesso a bancos de dados baseado em
SQL. Os componentes dessa API estão localizados no pacote java.sql e javax.sql. Para
conseguir acesso a diversos bancos de dados diferentes de maneira uniforme
padronizada, utilizam-se Drivers.

Conforme vimos em aula, trata-se do java.sql.

Gabarito: C

(ESAF - - ANA - Analista Administrativo - Tecnologia da Informação -


Desenvolvimento Em uma aplicação Java, se o carregador de classes não
16712855225

conseguir localizar a classe do driver de banco de dados para uma conexão


JDBC, é lançada a exceção

a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.

Comentários:

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 60 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance();

Connection con =
DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha");
}
catch(SQLException e)
{ // Se o carregador não localizar o driver do banco para conexão, lança a
// exceção java.lang.ClassNotFoundExeption
e.printStackTrace();
}

Conforme vimos em aula, trata-se do java.lang.ClassNotFoundException.

Gabarito: A

(FGV - 2009 - MEC - Analista de Sistemas - Especialista) Observe o código abaixo,


que se refere á implementação de Java no acesso a Banco de Dados em JDBC.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 61 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Analise a instrução a seguir: con = DriverManager.getConnection("jdbc:odbc:meusCdsDb", " conta


", " senha "); Assinale a alternativa que indique corretamente o significado da
instrução acima.

a) Abrir as tabelas do Banco de Dados.


b) Fechar a conexão com o Banco de Dados.
c) Liberar a conexão com o Banco de Dados.
d) Estabelecer a conexão com o Banco de Dados.
e) Criar uma variável para logon do Banco de Dados.

Comentários:

Para acessar um banco de dados, o primeiro passo é estabelecer uma conexão! É


possível fazer isso em duas etapas: primeiro, carrega-se o driver do banco de dados.
Uma vez carregado, o driver se registra para o DriverManager e está disponível para
a aplicação. Então usa-se o DriverManager para abrir uma conexão com o banco de
dados. A interface Connection designa um objeto con para receber a conexão.

Conforme vimos em aula, trata-se do estabelecimento de uma conexão.

Gabarito: D

(FCC - 2012 - MPE-AP - Técnico Ministerial - Informática Analise as linhas a


seguir presentes em um programa Java que não apresenta erros.

a = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver


(*.mdb)};DBQ=E:\\bd.mdb", "", "");

b = a.createStatement( ); 16712855225

c = b.executeQuery("select * from cliente where id = "+ valor +"");

Considere que os objetos a, b e c são de interfaces contidas no pacote java.sql.


Pode-se concluir que esses objetos são, respectivamente, das interfaces

a) Connection, SessionStatement e Result.


b) DriverManager, PreparedStatement e RecordSet.
c) ConnectionStatement, PreparedStatement e RecordSet.
d) Connection, Statement e ResultSet.
e) DaoConnection, Statement e ResultSet.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 62 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:

Conforme vimos em aula: a = Connection; b = Statement; c = ResultSet.

Gabarito: D

(CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – B JDBC, uma biblioteca vinculada a API da arquitetura JEE,
define como um cliente pode acessar bancos de dados OO exclusivamente.

Comentários:

De acordo com a documentação oficial: trata-se de uma API que fornece acesso
universal a dados a partir da linguagem de programação Java. É possível acessar
praticamente qualquer fonte de dados, desde bancos de dados relacionais a planilhas
ou arquivos simples. O JDBC também fornece uma base comum sobre a quais
ferramentas e interfaces alternativas podem ser construídas.

Conforme vimos em aula, ele pode acessar bancos de dados de quaisquer


paradigmas (OO, Relacional, etc).

Gabarito: E

(COPEVE-UFAL - 2012 - ALGÁS - Analista de Tecnologia da Informação – I Na


arquitetura do JDBC, a diferença entre os tipos Statement e PreparedStatement
é o fato do PreparedStatement manter os dados criptografados durante o
tráfego entre o cliente e o servidor do SGBD.
16712855225

Comentários:

Não existe isso! De fato, o PreparedStatement é mais seguro, visto que ajuda a
impedir SQL Injection. No entanto, ele não mantém dados criptografados.

Gabarito: E

(FGV - - MEC - Administrador de Banco de Dados) O pacote "java.sql" da


API Java consiste de um conjunto de classes e interfaces que permitem embutir
código SQL em métodos Java para por meio de drivers JDBC acessar diversos

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 63 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

SGBDs. As alternativas a seguir apresentam interfaces do pacote "java.sql", à


exceção de uma. Assinale-a.

a) SQLData
b) ResultSet
c) Statement
d) DriverManager
e) Connection

Comentários:

Pegadinha de banca que não sabe avaliar conhecimento! DriverManager não é uma
interface, é uma classe!

Gabarito: D

10. (CESPE - - HEMOBRÁS - Analista de Gestão Corporativa - Administrador


de Banco de Dados O JDBC fornece a classe CallableStatementSQL, que permite que
procedimentos ou funções SQL armazenados sejam chamados.

Comentários:

A terceira interface é CallableStatement, e permite executar procedimentos e funções


armazenados no banco (quando o banco suportar este recurso). A interface ResultSet
permite colher os resultados da execução de nossa query no banco de dados. Esta
interface apresenta uma série de métodos para prover o acesso aos dados. Depois é
só encerrar o acesso, liberando recursos.

Conforme vimos em aula, o nome correto é CallableStatement.


16712855225

Gabarito: E

ACERTEI ERREI

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 64 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JAVA VIRTUAL MACHINE (JVM)

A Linguagem Java tem dois processos de execução de código-fonte: Compilação e


Interpretação! Vamos lá... o programador escreve um código em Java em um editor
de texto, por exemplo. Ele salva com a extensão .java e passa por um compilador
(JavaC)! Esse compilador transforma o arquivo .java em código de máquina em
um arquivo .class, também chamado bytecode – como mostra a imagem abaixo.

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 65 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma


geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Uma observação importante: Código Java é sempre compilado em um bytecode


No entanto, nem todo bytecode é proveniente de Código Java. Como assim,
professor? É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um
bytecode e rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel,
Pascal, Python, C.

A JVM é capaz de entender bytecodes – assim como nós somos fluentes em


português, ela é fluente em bytecode. Para criar bytecodes, basta seguir um conjunto
de regras de formação. Logo, se existe um compilador que seja capaz de
transformar o código-fonte (de qualquer linguagem) em uma bytecode guindo as
16712855225

especificações corretamente, o bytecode poderá ser interpretado por uma JVM.

CURIOSIDADE:

A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 66 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESGRANRIO - 2011 – TRANSPETRO - Analista de Sistemas) Muito utilizada para


desenvolvimento de aplicativos Web, a tecnologia Java tem como principal
característica gerar aplicações que rodam em qualquer dispositivo que tenha
acesso a Internet, utilizando, entre outros recursos, o software:

a) JBC (Java Bytecode Console)


b) JDB (Java Developer Builder)
c) JMS (Java Management Server)
d) JAC (Java Application Controler)
e) JVM (Java Virtual Machine)

Comentários:

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,
UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma
geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Conforme vimos em aula, trata-se da JVM (Java Virtual Machine).

Gabarito: E
16712855225

(CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java Virtual
Machine — JVM) é especificada para interpretar instruções expressas em
bytecodes e compiladas a partir de uma linguagem de programação do tipo
Java, mas não necessariamente Java.

Comentários:

Uma observação importante: Código Java é sempre compilado em um bytecode. No


entanto, nem todo bytecode é proveniente de Código Java. Como assim, professor?
É isso mesmo! Por exemplo: eu posso compilar o Código Ada em um bytecode e

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 67 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel, Pascal,
Python, C.

Conforme vimos em aula, não é necessariamente de Java!

Gabarito: C

(CESPE - 2010 – TRE/MT - Analista de Sistemas – A) JVM é um tipo de linguagem


de máquina, resultado da compilação do código-fonte Java, que é interpretado
e executado pela máquina virtual Java.

Comentários:

O bytecode é um código intermediário, que é posteriormente interpretado e


executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, não se trata de um tipo de linguagem, mas um programa!

Gabarito: E

(CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um


interpretador que atribui portabilidade à linguagem Java, possibilitando,
consequentemente, a sua execução em qualquer sistema operacional.

Comentários:
16712855225

Por conta deles, programas escritos em Java podem funcionar em qualquer


plataforma de hardware e software que possua uma JVM, tornando assim essas
aplicações independentes da plataforma, como apresenta a imagem acima (Win32,
UNIX e MacOS)! Galera, qualquer plataforma... desde um computador a uma
geladeira. A imagem abaixo é similar à anterior, apenas para solidificar!

Conforme vimos em aula, está perfeito! Observem que a questão afirma que
“possibilita a sua execução em qualquer sistema operacional”. De fato, o Sistema
Operacional deverá ter uma JVM implementada para ele. No entanto, a questão
afirma apenas que possibilita (desde que haja essa JVM). De fato, possibilita!

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 68 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Gabarito: C

(CESPE - 2008 - -DF - Analista Judiciário - Tecnologia da Informação) Na


linguagem Java, durante a interpretação do código, a JVM (Java Virtual Machine)
verifica se o applet faz tentativas de forjar ponteiros, de violar restrições de
acesso em membros de classes privadas e de gerar falhas na pilha.

Comentários:

Perfeito! A JVM realiza algumas verificações de segurança importantes,


principalmente, para o desenvolvimento de aplicações web.

Gabarito: C

(CONSULPLAN - 2012 - TSE - Programador de computador) Diferentemente de


outras linguagens de programação como C ou Pascal, Java utiliza uma
linguagem intermediária da Java Virtual Machine – JVM. Essa linguagem
intermediária denomina-se

a) bytecode.
b) appletcode.

Comentários:

A Linguagem Java tem dois processos de execução de código-fonte: Compilação e


Interpretação! Vamos lá... o programador escreve um código em Java em um editor
de texto, por exemplo. Ele salva com a extensão .java e passa por um compilador
(JavaC)! Esse compilador transforma o arquivo .java em código de máquina e em um
arquivo .class, também chamado bytecode – como mostra a imagem abaixo.
16712855225

Conforme vimos em aula, trata-se do bytecode!

Gabarito: A

(FCC - 2014 - SABESP - Tecnólogo – Sistemas – O processo híbrido combina


a execução eficiente e a portabilidade de programas. A base é a existência de
um código intermediário, mais fácil de ser interpretado e não específico de uma
plataforma computacional. O método é dividido em duas etapas: compilação
para um código intermediário e interpretação desse código. Um exemplo é o
Java e a JVM.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 69 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e
executado por uma Java Virtual Machine (JVM). O que é isso, professor? É um
programa que carrega e executa os aplicativos Java, convertendo bytecodes em
código executável. Lembram que eu falei que Java é uma Linguagem WORA? Pois é,
isso ocorre em grande parte por conta do bytecode e da Máquina Virtual Java.

Conforme vimos em aula, está perfeito! Essa é a conhecida Compilação Híbrida –


implementada pela JVM!

Gabarito: C

ACERTEI ERREI

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 70 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JPA

(FCC - – TRE/MS - Analista de Sistemas – A API de Persistência Java


pode ser utilizada no container Web e/ou no container EJB e disponibiliza
recursos de mapeamento objeto-relacional as aplicações Java EE.

(CESPE - 2014 - -SE - Analista Judiciário - Banco de Dados) A JPA, que foi
criada como alternativa para o Hibernate para conexão com os sistemas
gerenciadores de banco de dados, está nativa no Java SE a partir da versão 1.3.

(FCC - 2014 - TRT - 13ª Região (PB) - Técnico Judiciário - Tecnologia da


Informação Java Persistence API (JPA) é uma API padrão da linguagem Java para
persistência de dados em bancos de dados relacionais. Em uma aplicação que
utiliza JPA:

a) pode ser utilizada, como provedor de persistência, as bibliotecas EclipseLink,


Hibernate, OracleTopLink, JBossSeam e JDBCProvider.

b) as classes de entidade do banco de dados permitem o mapeamento entre


objetos da classe e tabelas do banco de dados, utilizando anotações como
@Table, @Entity, @PrimaryKey, @Column, @Constraint, @Foreignkey e @EJB.

c) todas as operações realizadas nas tabelas do banco de dados, como inserção


de dados, alteração, consultas e exclusão, são realizadas sem o uso de instruções
SQL, ou seja, o desenvolvedor não precisa conhecer SQL para programar.
16712855225

d) as configurações de acesso a banco de dados normalmente ficam no arquivo


persistence.xml, ligado à aplicação, de forma que se for alterado o servidor de
banco de dados não seja necessário alterar o código-fonte Java da aplicação.

e) as relações existentes entre as tabelas do banco de dados não são refletidas


nas classes de entidade criadas na aplicação, o que torna a execução mais rápida.
O mapeamento de relações é feito em tempo de execução pelas bibliotecas do
provedor de persistência.

(CESPE - 2010 – MPU – Analista de Sistemas A versão 3.0 da API de Persistência


Java utiliza descritores de implantação, não permitindo uso de anotações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 71 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - 2010 – – Analista de Sistemas A versão 3.0 da API de Persistência


Java provê uma linguagem de consulta de persistência Java que é uma forma
melhorada da linguagem de consulta do EJB.

(CESPE - 2010 – MPU – Analista de Sistemas A API de Persistência Java é


embasada em ideias contidas em frameworks líderes de mercado, como
Hibernate, Oracle TopLink e Objetos de Dados Java.

(CESPE - 2013 – TRE/MS – Analista de Sistemas Assinale a opção correspondente


ao elemento que, além de ser utilizado para definir um meio de mapeamento
objeto-relacional para objetos Java simples e comuns (POJOs), denominados
beans de entidade, também é utilizado para gerenciar o desenvolvimento de
entidades do modelo relacional em plataforma nativa Java SE e Java EE.

a) JSF
b) SVN
c) JPA
d) spring
e) struts

(FCC - 2012 - -PE - Analista Judiciário - Análise de Sistemas Quando se utiliza


JPA, um EntityManager mapeia um conjunto de classes a um banco de dados
particular. Este conjunto de classes, definido em um arquivo chamado
persistence.xml, é denominado:

a) persistence context.
b) persistence unit.
c) entity manager factory. 16712855225

d) entity transaction.
e) persistence provider.

(CESPE - 2013 - CNJ - Técnico Judiciário - Programação de Sistemas Os objetos


mapeados na linguagem Java que devem ser persistidos como objetos precisam
utilizar JPA (Java Persistence API), pois o JPA permite realizar o mapeamento
objeto/relacional automatizado e transparente e sua persistência em um banco
de dados relacional.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 72 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

10. (FGV - 2009 – MEC – Analista de Sistemas – C) JPA é uma tecnologia utilizada
no desenvolvimento de aplicações para Web, similar às tecnologias Active Server
Pages (ASP) da Microsoft ou PHP.

11. (CESPE - 2010 - TRE-BA - Programador de computador As tecnologias JPA e


EJB permitem, com o uso da linguagem Java, a manipulação de dados que estão
em um banco de dados.

12. (CESPE - 2013 - CPRM - Analista em Geociências - Sistemas) Java Persistence API
(JPA) é uma solução para persistência de dados, utilizada, inclusive, quando há
mapeamento do modelo orientado a objeto para bancos de dados relacionais.

13. (CESPE - 2013 – TRE/MS - Analista de Sistemas – C JPA é um framework MVC


de aplicações web que se destina a simplificar o desenvolvimento de interfaces
de usuário embasadas em web.

14. (CESPE - 2010 – TRE/MT - alista de Sistemas – E) JPA lida com a forma como
dados relacionais são mapeados para objetos Java e com a forma como esses
objetos são armazenados em um banco de dados relacional.

15. (CESGRANRIO - 2011 – PETROBRÁS - Analista de Sistemas – II) JPA é parte


integrante da especificação EJB e serve para definir as interfaces de acesso local
e/ou remoto de um componente EJB.

16. (CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – A JPA, um framework utilizado na camada de persistência,
define uma forma para mapear POJO (Plain Old Java Objects) para um banco
de dados.
16712855225

17. (FCC - 2013 – MPE/MA - Analista de Sistemas) Considere a classe Java a seguir
em uma aplicação que utiliza JPA, uma API que permite fazer o mapeamento de
persistência objeto/relacional:

package dao;
import javax.persistence.*;
public class ClienteDao {
private EntityManagerFactory emf;
private EntityManager em;
private EntityTransaction et;
private void iniciarTransacao()
{
emf = Persistence.createEntityManagerFactory("Exemplo");
em = emf.createEntityManager();
et = em.getTransaction();

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 73 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05
et.begin();
}
}

O parâmetro “Exemplo”, passado para o método createEntityManagerFactory


da classe Persistence refere-se ao nome:

a) da unidade de persistência definido na tag persistence-unit contida no


arquivo persistence.xml.

b) do arquivo de persistência Exemplo.xml que contém as tags com os


parâmetros de conexão com o banco de dados.

c) do banco de dados relacional ao qual a aplicação deseja se conectar.

d) da tabela do banco de dados na qual os dados da aplicação serão persistidos.

e) da classe que faz a conexão com o banco de dados relacional ao qual a


aplicação deseja se conectar.

18. (FCC - 2012 - -PE - Programador de computador Em uma classe de entidade


de uma aplicação que utiliza JPA, a anotação que define um atributo que não
será salvo no banco de dados é a:

a) @Optional.
b) @Transient.
c) @Stateless.
d) @Stateful.
e) @Local.
16712855225

19. (FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da
Informação Os estados do ciclo de vida de uma instância de uma entidade,
definidos na JPA 2.0, são:

b) novo (new), gerenciado (managed), destacado (detached) e removido


(removed).

b) ativo (active), inativo (inactive) e removido (removed).

c) novo (new), temporário (temporary), permanente (permanent) e destacado


(detached).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 74 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) novo (new), temporário (temporary) e destacado (detached)

e) gerenciado (managed), temporário (temporary), permanente (permanent) e


destacado (detached).

(FEPESE - 2013 - JUCESC - Analista Técnico em Gestão de Registro Mercantil -


Analista de Informática Em relação à JPA e Hibernate, considere as seguintes
afirmativas.

1. JPA especifica uma JSR.

2. Hibernate especifica uma JSR.

3. Hibernate cuida da camada de persistência enquanto JPA da camada de


transação.

4. Hibernate é uma implementação de JSR.

5. JPA é uma implementação de JSR.

Assinale a alternativa que indica todas as afirmativas corretas.

a) São corretas apenas as afirmativas 1 e 4.


b) São corretas apenas as afirmativas 2 e 3.
c) São corretas apenas as afirmativas 3 e 4.
d) São corretas apenas as afirmativas 1, 2 e 3.
e) São corretas apenas as afirmativas 3, 4 e 5
16712855225

21. (FCC - 2011 – TCE/PR – Analista de Sistemas A JPA:

a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE.

b) utiliza persistência gerenciada por contêiner (CMP), ou seja, as classes de


entidade e persistência necessitam de um contêiner presente em um servidor de
aplicações para serem executadas.

c) utiliza descritores XML para especificar informações do mapeamento


relacional de objeto, mas não oferece suporte a anotações.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 75 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) suporta consultas dinâmicas nomeadas nas classes de entidade que são


acessadas apenas por instruções SQL nativas.

e) possui uma interface EntityBeans que padroniza operações Create Read


Update Delete (CRUD) que envolvem tabelas.

(FCC - 2011 - TRT - 23ª REGIÃO (MT) - Técnico Judiciário - Tecnologia da


Informação) Em relação à JPA (Java Persistence API) é INCORRETO afirmar que:

a) @NamedQuery é aplicada para definir várias consultas.

b) @Entity define que haverá correspondência da classe com uma tabela do


banco de dados.

c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela.

d) @Column(name = "id", nullable = false) define que o atributo da classe


mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além
de definir que tal campo não pode ser nulo.
16712855225

e) @OneToMany indica que o atributo contém um conjunto de entidades que a


referenciam.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 76 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (CESPE)


HIBERNATE

(CESPE - 2010 - TRE-BA - Analista Judiciário - Análise de Sistemas No Hibernate,


apenas a linguagem de consulta HQL (Hibernate Query Language) pode ser
utilizada. A HQL executa os pedidos SQL sobre as classes de persistência do Java
em vez de tabelas no banco de dados, o que diminui a distância entre o
desenvolvimento das regras de negócio e o banco de dados.

(CESPE - 2009 - SECONT-ES - Auditor do Estado – Tecnologia da Informação


O Hibernate, um framework de mapeamento objeto relacional (ORM), cria uma
camada persistência na solução desenvolvida, o que permite ligar os objetos aos
bancos de dados relacionais. Entre seus serviços, o Hibernate provê um meio de
se controlar transações, por meio de métodos de suas interfaces session e
transaction, tendo ainda suporte a herança e polimorfismo. É distribuído sob a
licença LGPL, o que permite seu uso em projetos comerciais ou open source.

(CESPE - 2010 - TCU - Auditor Federal de Controle Externo - Tecnologia da


Informação - Parte II

Uma equipe de desenvolvimento de software recebeu a incumbência de desenvolver um sistema com as


características apresentadas a seguir.

 O sistema deverá ser integrado, interoperável, portável e seguro.


 O sistema deverá apoiar tanto o processamento online, quanto o suporte a decisão e gestão de
conteúdos.
 O sistema deverá ser embasado na plataforma JEE (Java enterprise edition) v.6, envolvendo servlets,
JSP (Java server pages), Ajax, JSF (Java server faces) 2.0, Hibernate 3.5, SOA e web services.
16712855225

O líder da equipe iniciou, então, um extenso processo de coleta de dados com o objetivo de identificar as
condições limitantes da solução a ser desenvolvida e tomar decisões arquiteturais e tecnológicas que
impactarão várias características funcionais e não funcionais do sistema, ao longo de seu ciclo de vida. A
partir dessa coleta, o líder deverá apresentar à equipe um conjunto de informações e de decisões.

A tecnologia Hibernate 3.5 é apropriada para o sistema a ser desenvolvido: entre as


características que a credenciam, está o fato de ela possibilitar a recuperação de
objetos por meio da formulação de queries em linguagens HQL (hibernate query
language) e SQL (structured query language), bem como pelo uso de APIs
(application programming interfaces) de busca por critério, entre outras.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 77 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(CESPE - - CEHAP- - Programador de computador No framework


Hibernate, é comum que uma instância de uma classe persistente tenha três
estados específicos. Assinale a opção que contém esses três estados.

a) plugged, disconnected, timewait


b) connected, disconnected, detached
c) transient, persistent, detached
d) transient, connected, timewait

(CESPE - 2010 - DETRAN-ES - Analista de Sistemas O Hibernate, framework


utilizado no desenvolvimento de consultas e atualização de dados em um banco
relacional, foi criado para facilitar a integração entre programas em Java,
funcionando também em ambientes .Net (NHibernate).

(CESPE - 2011 - Correios - Analista de Correios - Analista de Sistemas -


Desenvolvimento de Sistemas No Hibernate, o recurso Query Cache possibilita
fazer o cache de queries que são executadas várias vezes.

(CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas No Hibernate, caso o nome da classe seja diferente
do nome da tabela mapeada, é necessário informar, na anotação @Table, o
nome da tabela, por meio do atributo name.

(CESPE - 2013 - SERPRO - Analista - Desenvolvimento de Sistemas Em


Hibernate, a configuração de conexões de banco de dados deve ser feita
somente por meio do uso de arquivo de propriedade.

(CESPE - 2014 - SUFRAMA - Analista de Sistemas) De acordo com o mapeamento


16712855225

mostrado abaixo, no Hibernate, a coluna Evento_ID manterá a chave primária da


tabela Eventos.

<hibernate-mappingpackage=
"org.hibernate.tutorial.domain">
<class name="Evento" table="Eventos">
<id name="id" column="Evento_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 78 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

10. (CESPE - 2010 - TRE-BA - Programador de computador O Hibernate, um


framework para o mapeamento objeto-relacional, é escrito na linguagem Java e,
por isso, somente pode ser executado no ambiente Java.

11. (CESPE - 2013 - MPOG - Técnico de Nível Superior - - Categoria Profissional


7 Quando se desenvolve um mapeamento com Hibernate, uma classe
persistente criada não precisa implementar ou herdar qualquer classe especial
do framework Hibernate.

12. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) O objeto Session Factory do Hibernate mantém o
mapeamento objeto relacional na sessão.

13. (CESPE - 2013 - INPI - Analista de Planejamento - Desenvolvimento e


Manutenção de Sistemas) A Interface Criteria do Hibernate é utilizada para
realizar consultas ao banco de dados.

14. (CESPE - 2014 - SUFRAMA - Analista de Sistemas) Os tipos de mapeamento do


Hibernate são considerados tipos de dados SQL e precisam de conversão para
dados Java nas respectivas classes Java.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 79 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (FCC)


HIBERNATE

(FCC - 2011 - TRT - 19ª Região (AL) - Técnico Judiciário - Tecnologia da


Informação Linguagem de queries, fornecida pelo Hibernate, que é similar em
aparência ao SQL e que, no entanto, é orientada a objeto e compreende noções
como herança, polimorfismo e associação. Trata-se de:

a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação Os três estados de objeto definidos pelo framework Hibernate são:

a) Temporário (Temporary), Permanente (Permanent) e Resiliente (Resilient).


b) Transiente (Transient), Persistente (Persistent) e Resiliente (Resilient).
c) Temporário (Temporary), Persistente (Persistent) e Destacado (Detached).
d) Transiente (Transient), Persistente (Persistent) e Destacado (Detached).
e) Transiente (Transient), Permanente (Permanent) e Resiliente (Resilient).

(FCC - 2012 - TRE- - Técnico Judiciário - Programação de Sistemas) Com


relação ao framework Hibernate é correto afirmar:

a) Permite fazer a persistência automatizada dos objetos em uma aplicação Java


16712855225

para as tabelas de um banco de dados relacional, utilizando metadados


(descrição dos dados) que descrevem o mapeamento entre os objetos e o banco
de dados.

b) É uma boa opção apenas para sistemas que fazem muito uso de stored
procedures, triggers ou que implementam a maior parte da lógica da aplicação
no banco de dados vai se beneficiar mais com o uso do Hibernate.

c) Permite enviar unidirecionalmente uma representação de dados de um banco


de dados relacional para um modelo de objeto utilizando um esquema baseado
exclusivamente em Hibernate Query Language (HQL).

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 80 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) A Java Persistence API (JPA) implementa o Hibernate, que é parte do


Enterprise JavaBeans 4.0.

e) Em uma aplicação criada com Hibernate, para cada classe de persistência é


necessário criar um arquivo de mapeamento XML que deve ser salvo
obrigatoriamente com o nome da classe seguido pelo sufixo .map.xml.

(FCC - 2010 - TRT - 22ª Região (PI) - Técnico Judiciário - Tecnologia da


Informação) Hibernate é um framework:

a) que separa as funções que envolvem a construção de aplicações Web, através


da associação dos eventos do lado cliente com os manipuladores dos eventos
do lado do servidor.

b) pelo qual o programador utiliza a infraestrutura do servidor de aplicação


voltada para o desenvolvimento de aplicações de missão crítica e de aplicações
empresariais em geral.

c) no qual as questões de infraestrutura, segurança, disponibilidade e


escalabilidade são responsabilidade do servidor de aplicações, permitindo que o
programador se concentre, apenas, nas necessidades do negócio do cliente.

d) que permite ao desenvolvedor de páginas para internet produzir aplicações


que acessem o banco de dados, manipulem arquivos no formato texto e
capturem informações a partir de formulários.

e) cujo objetivo é diminuir a complexidade entre os programas Java que


precisam trabalhar com um banco de dados do modelo relacional.
16712855225

(FCC - 2007 - TRE-SE - Analista Judiciário - Tecnologia da Informação) Sendo


um grupo de classes e componentes responsáveis pelo armazenamento e
recuperação de dados, esta camada inclui necessariamente um modelo das
entidades do domínio de negócios (mesmo que seja somente um modelo de
metadados). No âmbito do mapeamento objeto-relacional (hibernate) esta é a
camada de:

a) negócio.
b) restrição.
c) apresentação.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 81 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

d) consistência.
e) persistência.

(FCC - 2007 - MPU - Analista de Informática - Desenvolvimento de Sistemas)


Objetos que têm uma representação no banco de dados, mas não fazem mais
parte de uma sessão do Hibernate, o que significa que o seu estado pode não
estar mais sincronizado com o banco de dados, são do tipo:

a) transient.
b) detached.
c) attached.
d) persistent.
e) consistent.

(FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da


Informação) Em sua essência, o Hibernate é um framework para:

a) mapeamento objeto-relacional (ORM).

b) desenvolvimento de aplicações de Internet rica (Rich Internet Application -


RIA).

c) implementação da camada Controller do padrão MVC (Model - View -


Controller).

d) construção de aplicações utilizando-se inversão de controle (IoC).

e) injeção de dependência (dependency injection) em aplicativos.


16712855225

(FCC - 2012 - TRF - 2ª REGIÃO - Técnico Judiciário - Informática) Quando se cria


uma aplicação Java utilizando um recurso de Mapeamento Objeto-Relacional
como o Hibernate, o mapeamento entre classes e tabelas, propriedades e
colunas, associações e chaves estrangeiras, tipos do Java e tipos do SQL, é feito
através de metadados. Esses metadados normalmente podem ser colocados em
arquivos XML ou diretamente nas classes, próximos da informação que eles
descrevem. Quando são colocados nas classes, esses metadados são conhecidos
como:

a) mappings.
b) annotations.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 82 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

c) descriptions.
d) patterns.
e) actions.

(FCC - 2008 – TRF5 - Analista de Sistemas) Usando o Hibernate, as pesquisas


podem ser realizadas em bancos de dados por meio de:

a) HQL, apenas.
b) Criteria Query API, apenas.
c) Criteria Query API e HQL, apenas.
d) Criteria Query API e SQL, apenas.
e) Criteria Query API, HQL e SQL.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 83 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HIBERNATE

(CONSULPLAN - 2012 - TSE - Analista Judiciário - Análise de Sistemas) Por suas


características, Hibernate 3.5 constitui uma ferramenta com a finalidade de
realizar o seguinte tipo de mapeamento:

a) objeto/relacional para Java.


b) gerencial/operacional para sites interativos textuais.
c) entidade/relacionamento para modelagem de dados.
d) lógico/físico para desenvolvimento por meio da prototipação.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 84 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JDBC

(FCC – – BACEN – Analista de Sistemas) O estabelecimento de conexão


entre um aplicativo Java e um banco de dados, para processar instruções SQL
de consulta e atualização, é possibilitado por meio do padrão aberto,
desenvolvido pela Microsoft, denominado:

a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.

(CESPE – – IPEA – Analista de Sistemas) O JDBC é usado, entre outras


coisas, para acesso a bancos de dados sem SQL, por meio de Java.

(FCC - - TRT - 2ª REGIÃO (SP) - Analista Judiciário - Tecnologia da


Informação A utilização de JDBC, em um programa Java, inicia com a indicação
do pacote que contém a JDBC API pela declaração:

a) import java.awt.*;
b) import java.util.*;
c) import java.sql.*;
d) import java.swing.*;
e) import java.jdbc.*;
16712855225

(ESAF - - ANA - Analista Administrativo - Tecnologia da Informação -


Desenvolvimento Em uma aplicação Java, se o carregador de classes não
conseguir localizar a classe do driver de banco de dados para uma conexão
JDBC, é lançada a exceção

a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 85 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

(FGV - 2009 - MEC - Analista de Sistemas - Especialista) Observe o código abaixo,


que se refere á implementação de Java no acesso a Banco de Dados em JDBC.

Analise a instrução a seguir: con = DriverManager.getConnection("jdbc:odbc:meusCdsDb", " conta


", " senha "); Assinale a alternativa que indique corretamente o significado da
instrução acima.
16712855225

a) Abrir as tabelas do Banco de Dados.


b) Fechar a conexão com o Banco de Dados.
c) Liberar a conexão com o Banco de Dados.
d) Estabelecer a conexão com o Banco de Dados.
e) Criar uma variável para logon do Banco de Dados.

(FCC - 2012 - MPE-AP - Técnico Ministerial - Informática Analise as linhas a


seguir presentes em um programa Java que não apresenta erros.

a = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver


(*.mdb)};DBQ=E:\\bd.mdb", "", "");

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 86 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

b = a.createStatement( );

c = b.executeQuery("select * from cliente where id = "+ valor +"");

Considere que os objetos a, b e c são de interfaces contidas no pacote java.sql.


Pode-se concluir que esses objetos são, respectivamente, das interfaces

a) Connection, SessionStatement e Result.


b) DriverManager, PreparedStatement e RecordSet.
c) ConnectionStatement, PreparedStatement e RecordSet.
d) Connection, Statement e ResultSet.
e) DaoConnection, Statement e ResultSet.

(CESPE - 2012 - -RO - Analista Judiciário - Análise de Sistemas –


Desenvolvimento – B JDBC, uma biblioteca vinculada a API da arquitetura JEE,
define como um cliente pode acessar bancos de dados OO exclusivamente.

(COPEVE-UFAL - 2012 - ALGÁS - Analista de Tecnologia da Informação – I Na


arquitetura do JDBC, a diferença entre os tipos Statement e PreparedStatement
é o fato do PreparedStatement manter os dados criptografados durante o
tráfego entre o cliente e o servidor do SGBD.

(FGV - - MEC - Administrador de Banco de Dados) O pacote "java.sql" da


API Java consiste de um conjunto de classes e interfaces que permitem embutir
código SQL em métodos Java para por meio de drivers JDBC acessar diversos
SGBDs. As alternativas a seguir apresentam interfaces do pacote "java.sql", à
exceção de uma. Assinale-a.
16712855225

a) SQLData
b) ResultSet
c) Statement
d) DriverManager
e) Connection

10. (CESPE - - HEMOBRÁS - Analista de Gestão Corporativa - Administrador


de Banco de Dados) O JDBC fornece a classe CallableStatementSQL, que permite que
procedimentos ou funções SQL armazenados sejam chamados.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 87 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

LISTA DE EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JVM

(CESGRANRIO - 2011 – TRANSPETRO - Analista de Sistemas) Muito utilizada para


desenvolvimento de aplicativos Web, a tecnologia Java tem como principal
característica gerar aplicações que rodam em qualquer dispositivo que tenha
acesso a Internet, utilizando, entre outros recursos, o software:

a) JBC (Java Bytecode Console)


b) JDB (Java Developer Builder)
c) JMS (Java Management Server)
d) JAC (Java Application Controler)
e) JVM (Java Virtual Machine)

(CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java Virtual
Machine — JVM) é especificada para interpretar instruções expressas em
bytecodes e compiladas a partir de uma linguagem de programação do tipo
Java, mas não necessariamente Java.

(CESPE - 2010 – TRE/MT - Analista de Sistemas – A) JVM é um tipo de linguagem


de máquina, resultado da compilação do código-fonte Java, que é interpretado
e executado pela máquina virtual Java.

(CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um


interpretador que atribui portabilidade à linguagem Java, possibilitando,
consequentemente, a sua execução em qualquer sistema operacional.

(CESPE - 2008 - -DF - Analista Judiciári - Tecnologia da Informação) Na


16712855225

linguagem Java, durante a interpretação do código, a JVM (Java Virtual Machine)


verifica se o applet faz tentativas de forjar ponteiros, de violar restrições de
acesso em membros de classes privadas e de gerar falhas na pilha.

(CONSULPLAN - 2012 - TSE - Programador de computador) Diferentemente de


outras linguagens de programação como C ou Pascal, Java utiliza uma
linguagem intermediária da Java Virtual Machine – JVM. Essa linguagem
intermediária denomina-se

a) bytecode.

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 88 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

b) appletcode.

(FCC - 2014 - SABESP - Tecnólogo – Sistemas – O processo híbrido combina


a execução eficiente e a portabilidade de programas. A base é a existência de
um código intermediário, mais fácil de ser interpretado e não específico de uma
plataforma computacional. O método é dividido em duas etapas: compilação
para um código intermediário e interpretação desse código. Um exemplo é o
Java e a JVM.

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 89 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JPA

1 2 3 4 5 6 7 8 9 10
C E D E C C C B C E
11 12 13 14 15 16 17 18 19 20
C C E C E C A B A A
21 22 23 24 25 26 27 28 29 30
A A

GABARITO DOS EXERCÍCIOS COMENTADOS (CESPE)


HIBERNATE

1 2 3 4 5 6 7 8 9 10
E C C C C C C E C E
11 12 13 14 15 16 17 18 19 20
C C C E

GABARITO DOS EXERCÍCIOS COMENTADOS (FCC)


HIBERNATE

1 2 3 4 5 6 7 8 9 10
D D A E E 16712855225
B A B E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


HIBERNATE

1 2 3 4 5 6 7 8 9 10
A

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 90 de 91


Curso Regular de Desenvolvimento de Software
Curso de Teoria e Exercícios - 2016
Prof. Diego Carvalho – Aula 05

JDBC

1 2 3 4 5 6 7 8 9 10
B C C A D D E E D E

GABARITO DOS EXERCÍCIOS COMENTADOS (DIVERSAS BANCAS)


JVM
1 2 3 4 5 6 7 8 9 10
E C E C C A C

16712855225

Prof. Diego Carvalho www.estrategiaconcursos.com.br Pág. 91 de 91

Você também pode gostar