Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
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
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.
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:
1
Possui até uma versão para .NET chama-se NHibernate.
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.
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
FAQ: JPA
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
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.
Java Persistence Criteria API (JPCA): define queries, em geral, dinâmicas para
entidades e seus estados persistentes;
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).
16712855225
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.
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
2
Ele especifica qual implementação será utilizada (Hibernate, Toplink, JDO, etc); conexão com banco, etc.
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?
16712855225
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.
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.
Gabarito: E
Comentários:
Gabarito: D
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:
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
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 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
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
Conforme vimos em aula, JPA pegou as melhores ideias dos frameworks líderes de
mercado e condensou em uma especificação.
Gabarito: C
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.
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
Gabarito: C
a) persistence context.
b) persistence unit.
c) entity manager factory.
d) entity transaction.
e) persistence provider.
Comentários:
Gabarito: B
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!
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
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.
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.
Gabarito: C
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
persistência de dados. Ele pode ser utilizado pelo Container EJB, pelo Container Web
ou pelo Application Client.
Gabarito: C
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.
Gabarito: E
Comentários:
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();
}
}
deseja se conectar.
Comentários:
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
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
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:
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?
Gabarito: A
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
a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE. 16712855225
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!
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;
(d) Conforme vimos em aula, pode-se utilizar JPQL e JPCA, com acesso feito por
SQL ou Java.
Gabarito: A
c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela. 16712855225
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.
@ManyToOne Mapeamento muitos para um (N:1).
@OneToMany Mapeamento um para muitos (1:N).
@OneToOne Mapeamento um para um (1:1).
Gabarito: A
ACERTEI ERREI
16712855225
HIBERNATE
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.
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.
OBSERVAÇÕES
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
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.
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!
16712855225
HIBERNATE: ARQUITETURA
<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.
4
Classes Persistentes não precisam implementar interfaces ou herdar de uma classe-base especial!
OBSERVAÇÕES
16712855225
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.
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 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
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;
@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;
}
}
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.
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
Comentários:
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
Gabarito: E
Comentários:
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
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.
Comentários:
Conforme vimos em aula, está perfeito! Vocês já notaram que isso cai bastante, né?!
Gabarito: C
Comentários:
16712855225
Gabarito: C
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
Comentários: 16712855225
Gabarito: C
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.
Gabarito: C
Comentários:
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
<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
Gabarito: C
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
Comentários:
Gabarito: C
Comentários:
Gabarito: C
Comentários:
Conforme vimos em aula, Criteria Query API é – sim – utilizada para consultas em
bancos de dados.
Gabarito: C
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
a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.
Comentários:
Gabarito: D
16712855225
Comentários:
Gabarito: D
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
Comentários:
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.
(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
(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)!
(e) Conforme vimos em aula, pode-se usar annotations. Ademais, o sufixo seria
hbm.xml.
Gabarito: A
Comentários:
(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
a) negócio.
b) restrição.
c) apresentação.
d) consistência.
e) persistência.
Comentários:
Gabarito: E
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:
Gabarito: B
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.
Gabarito: A
a) mappings.
b) annotations.
c) descriptions.
d) patterns.
e) actions.
Comentários:
Gabarito: B
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:
Gabarito: E
ACERTEI ERREI
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.
Gabarito: A
ACERTEI 16712855225
ERREI
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
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.
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();
}
ResultSet rs = stm.executeQuery(SQL);
finally
{
try
{
16712855225
a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.
Comentários:
16712855225
Gabarito: B
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.
Gabarito: C
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.
Gabarito: C
a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.
Comentários:
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();
}
Gabarito: A
16712855225
Comentários:
Gabarito: D
b = a.createStatement( ); 16712855225
Comentários:
Gabarito: D
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.
Gabarito: E
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
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
Comentários:
Gabarito: E
ACERTEI ERREI
16712855225
CURIOSIDADE:
A Sun Microsystems declarou recentemente que existem atualmente cerca de 5.5 bilhões de
dispositivos executando uma Java Virtual Machine (JVM).
Comentários:
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:
rodá-lo em uma JVM! E quais outras linguagens? Temos também Eiffel, Pascal,
Python, C.
Gabarito: C
Comentários:
Gabarito: E
Comentários:
16712855225
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!
Gabarito: C
Comentários:
Gabarito: C
a) bytecode.
b) appletcode.
Comentários:
Gabarito: A
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.
Gabarito: C
ACERTEI ERREI
16712855225
(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.
a) JSF
b) SVN
c) JPA
d) spring
e) struts
a) persistence context.
b) persistence unit.
c) entity manager factory. 16712855225
d) entity transaction.
e) persistence provider.
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.
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.
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.
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();
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:
a) pode ser usada fora de componentes EJB e fora da plataforma Java EE, em
aplicações Java SE.
c) @Id define que o atributo que está mapeado com tal anotação corresponderá
à chave primária da tabela.
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.
<hibernate-mappingpackage=
"org.hibernate.tutorial.domain">
<class name="Evento" table="Eventos">
<id name="id" column="Evento_ID">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>
16712855225
a) HiBD-QL.
b) OOQL.
c) ORM-QL.
d) HQL.
e) JEEQL.
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.
a) negócio.
b) restrição.
c) apresentação.
d) consistência.
e) persistência.
a) transient.
b) detached.
c) attached.
d) persistent.
e) consistent.
a) mappings.
b) annotations.
c) descriptions.
d) patterns.
e) actions.
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
16712855225
a) API.
b) ODBC.
c) SGDB.
d) JDBC.
e) OLE.
a) import java.awt.*;
b) import java.util.*;
c) import java.sql.*;
d) import java.swing.*;
e) import java.jdbc.*;
16712855225
a) java.lang.ClassNotFoundException.
b) java.io.FileNotFoundException.
c) java.lang.SecurityException.
d) java.io.IOException.
e) java.util.InputMismatchException.
b = a.createStatement( );
a) SQLData
b) ResultSet
c) Statement
d) DriverManager
e) Connection
(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.
a) bytecode.
b) appletcode.
16712855225
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
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
1 2 3 4 5 6 7 8 9 10
D D A E E 16712855225
B A B E
1 2 3 4 5 6 7 8 9 10
A
JDBC
1 2 3 4 5 6 7 8 9 10
B C C A D D E E D E
16712855225