<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Edson Gonçalves &#187; JPA 2.0</title>
	<atom:link href="http://www.edsongoncalves.com.br/tag/jpa-2-0/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.edsongoncalves.com.br</link>
	<description>Tecnologia e Conhecimento ao Alcance de Todos</description>
	<lastBuildDate>Fri, 23 Sep 2011 00:49:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>O que estou fazendo no momento</title>
		<link>http://www.edsongoncalves.com.br/2011/09/22/o-que-estou-fazendo-no-momento/</link>
		<comments>http://www.edsongoncalves.com.br/2011/09/22/o-que-estou-fazendo-no-momento/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 00:46:49 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[Off-Topic]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[EclipseLink]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[JSF 2.0]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[Livros]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[RichFaces]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=540</guid>
		<description><![CDATA[Olá Pessoal, tudo bom? Como vão vocês? Sei que estou sumido do blog. Muitos leitores estão, nestes meses, me mandando comentários pedindo  a continuação de alguns artigos, de séries, que comecei e ainda não terminei. Quero informar a todos que, neste momento, estou renovando meus livros, por isso parei um pouco de postar no blog. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal, tudo bom? Como vão vocês?</p>
<p>Sei que estou sumido do blog. Muitos leitores estão, nestes meses, me mandando comentários pedindo  a continuação de alguns artigos, de séries, que comecei e ainda não terminei. Quero informar a todos que, neste momento, estou renovando meus livros, por isso parei um pouco de postar no blog.</p>
<p>Muitas pessoas já sabem, outras nem fazem muita ideia, mas escrever toma muito tempo. Quem possui pouco tempo livre, como eu, no caso, é deixar os finais de semana com a família e  o descanso das noites, para nos dedicar a escrita.</p>
<p>Os escritores que sempre apoio em meu blog, até mesmo outros que desejarem aparecer no mural, só entrar em contato comigo. Sei o quanto é difícil divulgar um livro e ter um pouco de reconhecimento. Muita gente acha que ganhamos dinheiro com livros, que ficamos ricos, mas estou aqui para desmentir. Na área de informática, quem escreve é para ter o prazer de ajudar aqueles que estão com as mesmas dificuldades que, com certeza, passamos um dia.</p>
<p>Quero deixar aqui os meus sinceros agradecimentos a todos aqueles que postam comentários elogiando, criticando e pedindo mais tutoriais no blog. Para aqueles que não liberei os comentários, fiquem tranquilos que eu os li. Só não os liberei, muitas vezes, porque não tive tempo ou, por serem pedidos e perguntas relacionadas diretamente a mim, sobre o assunto, não me permiti o tempo necessário para responde-los.</p>
<p>Assim que terminar o meu primeiro objetivo, que é a completa reformulação e atualização, do livro &#8220;Desenvolvendo Aplicações Web com JSP, SERVLETS, JAVASERVER FACES, HIBERNATE, EJB 3 PERSISTENCE E AJAX&#8221;, voltarei a postar os diversos tutoriais, que já os tenho quase prontos, no blog.</p>
<p>Deixo aqui o espaço aberto, neste tópico, para que comentem o que acham interessante de estar neste livro que estou trabalhando. Já garanto que muitas criticas e pedidos, vindos de algumas centenas de leitores, não serão ignorados. Professores de universidades, faculdades e escolas técnicas do Brasil e alguns países de língua portuguesa, que também me procuraram para deixar seus pedidos e criticas, quero manter meu compromisso de que todos serão levados em consideração.</p>
<p>Agradeço a compreensão de todos.</p>
<p>Bons códigos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2011/09/22/o-que-estou-fazendo-no-momento/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Spring MVC 3 na Prática com Bean Validation</title>
		<link>http://www.edsongoncalves.com.br/2010/10/24/spring-mvc-3-na-pratica-com-bean-validation/</link>
		<comments>http://www.edsongoncalves.com.br/2010/10/24/spring-mvc-3-na-pratica-com-bean-validation/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 22:56:13 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[Spring MVC 3.0]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Spring MVC]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=498</guid>
		<description><![CDATA[Olá Pessoal, tudo bom? Como vão vocês? Este é o terceiro artigo da série Spring MVC 3.0. Se vocês não tiveram um contato inicial com o framework, recomendo ver este artigo primeiro. Para acompanhar esta terceira parte, recomendo ter criado o projeto do segundo artigo. Como sempre, dúvidas e críticas são bem vindas. Alterando o [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal, tudo bom? Como vão vocês?</p>
<p>Este é o terceiro artigo da série Spring MVC 3.0. Se vocês não tiveram um contato inicial com o framework, recomendo ver este <a href="../2010/02/27/spring-mvc-3-0-na-pratica-parte-1/">artigo primeiro</a>.</p>
<p>Para acompanhar esta terceira parte, recomendo ter criado o projeto do <a href="../2010/08/16/spring-mvc-3-na-pratica-com-jpa-2/">segundo artigo</a>.</p>
<p>Como sempre, dúvidas e críticas são bem vindas.</p>
<h3>Alterando o CRUD criado com o Spring MVC</h3>
<p>O projeto neste artigo é o mesmo do segundo artigo da série. Entretanto, faremos algumas alterações para que passe a utilizar validações do Bean Validation.</p>
<h3>Adicionando as bibliotecas ao projeto utilizando o Maven</h3>
<p>Mais uma vez, recorreremos ao Maven para adicionar as bibliotecas que necessitamos. Neste caso, teremos que baixar o <strong>Hibernate Validator</strong>. Para utilizar o Bean Validation, utilizaremos dois JARs: <strong>hibernate-validator-4.0.2.GA.jar</strong> e <strong>validation-api-1.0.0.GA.jar</strong>.</p>
<p>Abram o arquivo <strong>pom.xml </strong>, encontrado na view <strong>Package Explorer</strong> para que possamos adicionar as configurações que necessitamos.</p>
<h4>Criando a propriedade</h4>
<p>Na aba <strong>Overview</strong>, em <strong>Properties</strong>, cliquem no botão <strong>Create</strong>. Na caixa de diálogo <strong>Add property</strong>, preencham como na <strong>Figura 1</strong>.</p>
<div id="attachment_499" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-1.jpg" rel="lightbox[498]"><img class="size-medium wp-image-499" title="Figura-1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-1-300x108.jpg" alt="" width="300" height="108" /></a><p class="wp-caption-text">Figura 1 - Criação da property da versão do hibernate validator</p></div>
<h4>Criando a dependência</h4>
<p>Com a propriedade definida para informar qual versão desejamos utilizar, no qual o Maven deverá baixar, resta configurar  as dependências.</p>
<p>Na aba <strong>Dependencies</strong>, cliquem no botão <strong>Create</strong> e preencham conforme a <strong>Figura 2</strong> ilustra.</p>
<div id="attachment_500" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-2.jpg" rel="lightbox[498]"><img class="size-medium wp-image-500" title="Figura-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-2-300x159.jpg" alt="" width="300" height="159" /></a><p class="wp-caption-text">Figura 2 - A dependência do Hibernate Validator</p></div>
<h3>Alterando a entidade Contato</h3>
<p>A entidade do artigo, chamada de Contato, será a primeira coisa que iremos modificar no projeto.</p>
<p>Graças a JSR 303, chamada de Bean Validation, podemos anotar as entidades com validações. Com as anotações de Bean Validation na entidade, concentramos a validação em um único local, de forma padronizada, tornando possível portar estas validações para as classes controladoras do Spring MVC.</p>
<p>A <strong>Listagem 1</strong> exibe  a entidade <strong>Contato</strong> modificada. Note as anotações de validação onde colocamos as mensagens de erro embutidas. Mais adiante iremos capturá-las para exibir o problema ao usuário.</p>
<div>
<p><strong>Listagem 1. A entidade Contato com anotações Bean Validation.</strong></p>
<pre class="brush:java">package br.com.integrator;

import javax.persistence.*;
import javax.validation.constraints.*;

@Entity
@Table(name = "contato")
public class Contato {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	private Long id;
	@NotNull
	@Size(min=5, message="O nome não pode ter menos que 5 caracteres!")
	private String nome;
	@NotNull
	@Pattern(regexp = "^[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$", message="E-mail com formato incorreto.")
	private String email;
	@Pattern(regexp = "\\(?\\b([0-9]{2})\\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})\\b", message="Telefone em formato incorreto")
	private String telefone; 

     //getters e setters
 }</pre>
<p>A infra-estrutura definida pela JSR 303 nos permite descrever as restrições, usando anotações no modelo de classes de persistência, como definir se um campo aceitará uma quantidade mínima de caracteres ou se não aceitará nulo, por exemplo.</p>
<p>Cada anotação é associada a uma validação, verificando se a instância da entidade anotada obedece à regra ou não.</p>
<p>A <strong>Tabela 1</strong> apresenta<strong> </strong>todas<strong> </strong>as anotações possíveis de serem usadas e suas funcionalidades.</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="154" valign="top"><strong>Annotation</strong></td>
<td valign="top"><strong>O   que faz?</strong></td>
</tr>
<tr>
<td width="154" valign="top">@AssertFalse</td>
<td valign="top">Checa se a   propriedade anotada é falsa.</td>
</tr>
<tr>
<td width="154" valign="top">@AssertTrue</td>
<td valign="top">Checa se a   propriedade anotada é verdadeira.</td>
</tr>
<tr>
<td width="154" valign="top">@DecimalMax(value=)</td>
<td valign="top">A propriedade   anotada precisa ser um número, cujo valor deve estar menor ou igual ao valor   máximo previsto. O parâmetro value é a representação em string do valor máximo aceito de acordo com o   formato representado em BigDecimal. Suporta tipos como BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos primitivos.</td>
</tr>
<tr>
<td width="154" valign="top">@DecimalMin(value=)</td>
<td valign="top">A propriedade   anotada precisa ser um número, cujo valor deve estar maior ou igual ao valor   mínimo previsto. O parâmetro value é a representação em string do valor mínimo de acordo com a   representação de sequência de BigDecimal. Suporta tipos como BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos primitivos.</td>
</tr>
<tr>
<td width="154" valign="top">@Digits(integer=, fraction=)</td>
<td valign="top">Verifica se a   propriedade possui a quantidade de dígitos antes e depois do separador de   casa decimal. Por exemplo: @Digits(integer=9, fraction=2) significa que espera-se 9 dígitos   inteiros e 2 dígitos fracionários. Suporta os tipos: BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos   primitivos.</td>
</tr>
<tr>
<td width="154" valign="top">@Future</td>
<td valign="top">Checa se a   data está no futuro. Suporta os tipos java.util.Date e java.util.Calendar.</td>
</tr>
<tr>
<td width="154" valign="top">@Max(value=)</td>
<td valign="top">Verifica se o   valor é menor ou igual ao valor anotado. Suporta os tipos: BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos   primitivos.</td>
</tr>
<tr>
<td width="154" valign="top">@Min(value=)</td>
<td valign="top">Verifica se o   valor é maior ou igual ao valor anotado. Suporta os tipos: BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos   primitivos.</td>
</tr>
<tr>
<td width="154" valign="top">@NotNull</td>
<td valign="top">Checa se o   valor anotado não é nulo (null). Uma String cujo valor seja vazio (“”) vai   passar.</td>
</tr>
<tr>
<td width="154" valign="top">@Null</td>
<td valign="top">Checa se o   valor anotado é nulo (null).</td>
</tr>
<tr>
<td width="154" valign="top">@Past</td>
<td valign="top">Checa se uma   data está no passado. Suporta os tipos java.util.Date e java.util.Calendar.</td>
</tr>
<tr>
<td width="154" valign="top">@Pattern(regex=, flag=)</td>
<td valign="top">Checa se a   propriedade obedece à expressão regular.</td>
</tr>
<tr>
<td width="154" valign="top">@Size(min=, max=)</td>
<td valign="top">Confere se a   quantidade de elementos está entre o mínimo e o máximo, suportando tipos   como: Strings, Collections, Maps e   arrays.</td>
</tr>
<tr>
<td width="154" valign="top">@Valid</td>
<td valign="top">Impõe uma   validação recursiva aos objetos associados. Digamos que, no bean Post,   houvesse a anotação @Valid no atributo comments.   Já na classe Comment, temos um atributo de validação anotado.   Se um valor transmitido a comments, de Post, não estiver de acordo com a validação   existente na classe Comment, de acordo com o atributo anotado, um   erro será gerado em tempo de execução. A notação @Valid está sendo   usada no PostController   para validar os erros existentes em Post ou Comment.</td>
</tr>
</tbody>
</table>
<p><strong>Tabela 1</strong>. Anotações e regras para criar restrições (Constraints).</p>
<h3>Alterando o controlador</h3>
<p>Alteraremos a classe ContatoController, criada no pacote <strong>br.com.integrator.web</strong>, de acordo com o mostrado na <strong>Listagem 2</strong>.</p>
<div>
<p><strong>Listagem 2. A classe ContatoController alterada.</strong></p>
<pre class="brush:java">package br.com.integrator.web;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import br.com.integrator.dao.ContatoDAO;
import br.com.integrator.Contato;

@Controller
@RequestMapping("/contato/**")
public class ContatoController {
@Autowired
private ContatoDAO contatoDao;

@RequestMapping(value = "/contato/{id}", method = RequestMethod.GET)
public String show(@PathVariable("id") Long id, ModelMap modelMap) {
modelMap.addAttribute("contato", contatoDao.find(id));
return "contato/show";
}

@RequestMapping(value = "/contato", method = RequestMethod.GET)
public String list(ModelMap modelMap) {
modelMap.addAttribute("contatos", contatoDao.findAll());
return "contato/list";
}

@RequestMapping(value = "/contato/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") Long id) {
contatoDao.remove(contatoDao.find(id));
return "redirect:/contato";
}

@RequestMapping(value = "/contato/form", method = RequestMethod.GET)
public String form(ModelMap modelMap) {
modelMap.addAttribute("contato", new Contato());
return "contato/create";
}

@RequestMapping(value = "/contato", method = RequestMethod.POST)
public String create(@Valid Contato contato, BindingResult result) {
if (result.hasErrors())
return "contato/create";

contatoDao.persist(contato);
return "redirect:/contato";
}

@RequestMapping(value = "/contato/{id}/form", method = RequestMethod.GET)
public String updateForm(@PathVariable("id") Long id, ModelMap modelMap) {
modelMap.addAttribute("contato", contatoDao.find(id));
return "contato/update";
}

@RequestMapping(method = RequestMethod.PUT)
public String update(@Valid Contato contato, BindingResult result) {
if (result.hasErrors())
return "contato/update";

contatoDao.merge(contato);
return "redirect:/contato";
}

}</pre>
<p>Como visto na <strong>Listagem 1</strong>, as anotações <strong>@Size</strong> e <strong>@Pattern</strong> possuem o atributo message, que capturamos pelo Spring MVC na classe <strong>ContatoController</strong> (<strong>Listagem 2</strong>)  - através da classe <strong>javax.validation.Valid</strong> (anotação <strong>@Valid</strong>). Assim como a anotação <strong>@Controller</strong>, as anotações pertencentes a <strong>Bean Validation</strong> são obtidas graças a adição do elemento <strong>&lt;mvc:annotation-driven /&gt;</strong>. Isto permite que as informações anotadas sejam injetadas onde a validação é necessária na sua aplicação.Caso haja um erro, o método <strong>hasErrors()</strong>, de <strong>org.springframework.validation.BindingResult</strong>, retorna true, nos possibilitando conduzir a navegação da página, com seus respectivos erros, inclusive paralisando a ação ao qual se encontra. A utilização de <strong>hasErrors()</strong> ocorre em <strong>ContatoController</strong>, nos métodos create() e update() com o seguinte if:</p>
<pre>if (result.hasErrors())

//executa uma ação para conduzir a página com os erros ao usuário</pre>
<p>As informações recebidas da validação pela classe Controller são transmitidas para o formulário e capturadas. Veja como isto ocorre na descrição da <strong>Listagem 3</strong>.</p>
<h3>Alterando as views</h3>
<p>Temos três páginas que representam nosso CRUD feitas. Estas páginas foram criadas dentro do diretório chamado WEB-INF<strong>/jsp/contato</strong>(fisicamente na ferramenta: <strong>src/main/webapp/WEB-INF/jsp/contato</strong>). Teremos que alterá-las para permitir que os erros sejam exibidos.</p>
<h4>O formulário de cadastro</h4>
<p>Abra o arquivo <strong>create.jsp</strong> e altere como na <strong>Listagem 3</strong>, adicionando as tags  <strong>&lt;form:errors /&gt;</strong>.</p>
<p><strong>Listagem 3. A página create.jsp.</strong></p>
<pre class="brush:xhtml">&lt;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%&gt;
&lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt;
&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt;
&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;style type="text/css" media="screen"&gt;
 @import url("&lt;c:url value="/static/styles/style.css"/&gt;");
 &lt;/style&gt;
&lt;title&gt;Cadastrar&lt;/title&gt;

&lt;/head&gt;
&lt;body&gt;
 &lt;div id="wrap"&gt;

 &lt;div id="menu"&gt;
 &lt;%@ include file="/menu.jsp" %&gt;
 &lt;/div&gt;
 &lt;div id="main"&gt;
 &lt;div id="body"&gt;
 &lt;c:url var="url" value="/contato" /&gt;
 &lt;form:form action="${url}" method="POST" modelAttribute="contato"&gt;
 &lt;div&gt;
 &lt;label for="nome"&gt;Nome:&lt;/label&gt;
 &lt;form:errors path="nome" cssClass="errors"/&gt;&lt;br /&gt;
 &lt;form:input cssStyle="width:250px" maxlength="30" path="nome" size="30"/&gt;

 &lt;/div&gt;
 &lt;br/&gt;
 &lt;div&gt;
 &lt;label for="email"&gt;Email:&lt;/label&gt;
 &lt;form:errors path="email" cssClass="errors"/&gt;&lt;br /&gt;
 &lt;form:input cssStyle="width:250px" maxlength="30" path="email" size="30"/&gt;

 &lt;/div&gt;
 &lt;br/&gt;
 &lt;div&gt;
 &lt;label for="telefone"&gt;Telefone:&lt;/label&gt;
 &lt;form:errors path="telefone" cssClass="errors"/&gt;&lt;br /&gt;
 &lt;form:input cssStyle="width:250px" maxlength="30" path="telefone" size="20"/&gt;
&lt;/div&gt;
 &lt;br/&gt;&lt;div&gt;
 &lt;input id="criar" type="submit" value="Criar Contato"/&gt;
 &lt;/div&gt;
 &lt;/form:form&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<div>A tag  <strong>&lt;form:errors /&gt;</strong> foi utilizada na <strong>Listagem 3</strong> com dois parâmetros: <strong>path</strong> e <strong>cssClass</strong>. No parâmetro <strong>path</strong> transmitimos o  atributo da classe <strong>Contato</strong>, validada pelas anotações de Bean Validation, onde receberá a mensagem.</div>
<div>
<div id="attachment_501" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-3.jpg" rel="lightbox[498]"><img class="size-medium wp-image-501" title="Figura-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-3-300x141.jpg" alt="" width="300" height="141" /></a><p class="wp-caption-text">Figura 3 – Processo de validação partindo da anotação no JavaBean Contato</p></div>
<p>Podemos ter uma idéia de como ficará a página <strong>create.jsp</strong> depois das alterações visualizando a <strong>Figura 4</strong>.</p>
<div id="attachment_502" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-4.jpg" rel="lightbox[498]"><img class="size-medium wp-image-502" title="Figura-4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/10/Figura-4-300x130.jpg" alt="Figura 4 – Validação transmitida para a página de JSP" width="300" height="130" /></a><p class="wp-caption-text">Figura 4 – Validação transmitida para a página de JSP</p></div>
<h4>Alterando a página de atualização de dados</h4>
<p>Como feito na página <strong>create.jsp</strong>, a página <strong>update.jsp</strong> também receberá as tags <strong>&lt;form:errors /&gt;</strong>. A <strong>Listagem 4</strong> exibe a página com as mudanças, na íntegra.</p>
<div>
<p><strong>Listagem 4. A página update.jsp.</strong></p>
<pre class="brush:xhtml">&lt;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%&gt;
&lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt;
&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt;
&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
 &lt;style type="text/css" media="screen"&gt;
 @import url("&lt;c:url value="/static/styles/style.css"/&gt;");
 &lt;/style&gt;
&lt;title&gt;Atualizar&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;div id="wrap"&gt;
 &lt;div id="menu"&gt;
 &lt;%@ include file="/menu.jsp" %&gt;
 &lt;/div&gt;
 &lt;div id="main"&gt;
 &lt;div id="body"&gt;
 &lt;c:url var="url" value="/contato/${contato.id}" /&gt;
 &lt;form:form action="${url}" method="PUT" modelAttribute="contato"&gt;
 &lt;div&gt;
 &lt;label for="nome"&gt;Nome:&lt;/label&gt;
 &lt;form:errors path="nome" cssClass="errors"/&gt;&lt;br /&gt;
 &lt;form:input cssStyle="width:250px" maxlength="30" path="nome" size="30"/&gt;
 &lt;/div&gt;
 &lt;br/&gt;
 &lt;div&gt;
 &lt;label for="email"&gt;Email:&lt;/label&gt;
 &lt;form:errors path="email" cssClass="errors"/&gt;&lt;br /&gt;
 &lt;form:input cssStyle="width:250px" maxlength="30" path="email" size="30"/&gt;
 &lt;/div&gt;
 &lt;br/&gt;
 &lt;div&gt;
 &lt;label for="telefone"&gt;Telefone:&lt;/label&gt;
 &lt;form:errors path="telefone" cssClass="errors"/&gt;&lt;br /&gt;
 &lt;form:input cssStyle="width:250px" maxlength="30" path="telefone" size="20"/&gt;
 &lt;/div&gt;
 &lt;br/&gt;
 &lt;div&gt;
 &lt;input id="atualizar" type="submit" value="Atualizar Contato"/&gt;
 &lt;/div&gt;
 &lt;form:hidden path="id"/&gt;
 &lt;/form:form&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>O projeto para download</h3>
<p><a href="http://www.edsongoncalves.com.br/downloads/ProjSpringMvcComJpa2.zip">Clique aqui</a> para baixar o projeto e alterá-lo como desejar.</p>
<h3>Considerações finais</h3>
<p>Com as validações, boa parte dos problemas iniciais de um desenvolvimento usando o Spring MVC foram resolvidos. Mas vejam só: é o começo. Caso haja interesse do leitor em aprender um exemplo mais complexo, a revista <a href="http://www.devmedia.com.br/post-16564-Revista-Java-Magazine-78.html">JavaMagazine #78</a> publicou, um artigo meu com o Spring MVC 3 na criação de um blog, do começo ao fim. É um bom início para se desenvolver um projeto mais completo e complexo.<br />
Para os que acompanham o blog, o assunto Spring MVC não para por aqui. Veremos em breve um site completo, feito com o framework, unindo várias características do Spring, de seu framework MVC e a parte de segurança com Spring Security.</p>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/10/24/spring-mvc-3-na-pratica-com-bean-validation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Spring MVC 3 na Prática com JPA 2</title>
		<link>http://www.edsongoncalves.com.br/2010/08/16/spring-mvc-3-na-pratica-com-jpa-2/</link>
		<comments>http://www.edsongoncalves.com.br/2010/08/16/spring-mvc-3-na-pratica-com-jpa-2/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 03:49:28 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[Spring MVC 3.0]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Spring MVC]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=461</guid>
		<description><![CDATA[Olá Pessoal, tudo bom? Como vão vocês? Este é o segundo artigo da série Spring MVC 3.0. Desta vez iremos trabalhar com a JPA em conjunto com o framework Spring MVC. Se vocês não tiveram um contato inicial com o framework, recomendo ver este artigo primeiro. Como sempre, dúvidas e críticas são bem vindas. O [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal, tudo bom? Como vão vocês?</p>
<p>Este é o segundo artigo da série Spring MVC 3.0. Desta vez iremos trabalhar com a JPA em conjunto com o framework Spring MVC. Se vocês não tiveram um contato inicial com o framework, recomendo ver este <a href="../2010/02/27/spring-mvc-3-0-na-pratica-parte-1/">artigo primeiro</a>.</p>
<p>Como sempre, dúvidas e críticas são bem vindas.</p>
<h3>O Servidor Java</h3>
<p>Para este artigo, vamos utilizar o Tomcat 7.0, ainda em beta. Para baixar o binário do Tomcat 7, vá até o endereço <a href="http://tomcat.apache.org/">http://tomcat.apache.org/</a>.</p>
<p>A versão que vamos baixar é a compactada. Por exemplo, se o seu Windows for de uma versão 64bits, baixe o arquivo apache-tomcat-7.0.0-windows-x64.zip.</p>
<p><strong>Atenção:</strong> O Tomcat 7.0 roda somente na JDK 6 ou superior.</p>
<h3>O banco de dados</h3>
<p>O banco de dados utilizado será o <a href="http://www.mysql.com/">MySQL</a>. Você pode baixar a versão 5.1, utilizada no artigo, <a href="http://dev.mysql.com/downloads/mysql/">aqui</a>.</p>
<h4>Preparando o banco de dados do exemplo</h4>
<p>Abra o terminal do MySQL com seu usuário e senha ROOT (aquela que você configurou na instalação).</p>
<p>Crie o banco de dados executando o seguinte comando:</p>
<p><strong>create database springmvc;</strong></p>
<p><strong> </strong></p>
<h3>O ambiente de trabalho</h3>
<p>A própria empresa responsável pelo Spring Source, divisão da VMware, possui uma ferramenta completa, criada sobre a plataforma Eclipse, chamada de SpringSource Tools Suite.</p>
<p>Para baixar o SpringSource Tools Suite, <a href="http://www.springsource.com/products/springsource-tool-suite-download">clique aqui</a>, preencha o formulário e faça o Download. Como a ferramenta possui uma opção de instalador, usem-na como facilitador se desejar. Na própria página onde baixar o arquivo, haverá a explicação da instalação em cada plataforma, em <strong>Installation Instructions</strong>.</p>
<h3>Criando o projeto</h3>
<p>Na view <strong>Package Explorer</strong>, com o direito do mouse, selecionem <strong>New&gt;Spring Template Project</strong> no menu de contexto.</p>
<div id="attachment_462" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-1.jpg" rel="lightbox[461]"><img class="size-medium wp-image-462" title="Figura 1 – Iniciando a criação de um projeto modelo utilizando Spring MVC " src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-1-300x180.jpg" alt="Figura 1 – Iniciando a criação de um projeto modelo utilizando Spring MVC" width="300" height="180" /></a><p class="wp-caption-text">Figura 1 – Iniciando a criação de um projeto modelo utilizando Spring MVC</p></div>
<p>Na caixa  de diálogo <strong>New Template Project</strong>, selecione <strong>Spring MVC Project</strong> e clique no botão <strong>Next</strong>.</p>
<div id="attachment_463" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-2.jpg" rel="lightbox[461]"><img class="size-medium wp-image-463" title="figura-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-2-300x291.jpg" alt="Figura 2 – Opção Spring MVC Project" width="300" height="291" /></a><p class="wp-caption-text">Figura 2 – Opção Spring MVC Project</p></div>
<p>Ao aparecer a caixa de diálogo <strong>Import</strong>, cliquem no botão <strong>Yes</strong> para permitir que o projeto faça o download das bibliotecas do Spring MVC. No segundo projeto que criar, não haverá necessidade deste download. Falaremos mais adiante sobre este download e como ele ocorre.</p>
<div id="attachment_464" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-3.jpg" rel="lightbox[461]"><img class="size-medium wp-image-464" title="figura-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-3-300x77.jpg" alt="Figura 3 – Confirmação para o download das bibliotecas do projeto" width="300" height="77" /></a><p class="wp-caption-text">Figura 3 – Confirmação para o download das bibliotecas do projeto</p></div>
<p>Após o download das bibliotecas, prosseguiremos na criação do projeto. Coloque o nome do seu projeto em <strong>Project name</strong> e o pacote principal abaixo. Confirmem no botão <strong>Finish</strong>.</p>
<div id="attachment_465" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-4.jpg" rel="lightbox[461]"><img class="size-medium wp-image-465" title="figura-4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-4-300x267.jpg" alt="Figura 4 – Definição do nome do projeto e pacote principal" width="300" height="267" /></a><p class="wp-caption-text">Figura 4 – Definição do nome do projeto e pacote principal</p></div>
<p>O assistente criará, em sua conclusão, um projeto com uma estrutura básica, contendo uma classe, página e arquivos de configurações do framework Spring MVC, como mostra na <strong>Figura 5</strong>.</p>
<div id="attachment_466" class="wp-caption alignnone" style="width: 299px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-5.jpg" rel="lightbox[461]"><img class="size-medium wp-image-466" title="figura-5" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-5-289x300.jpg" alt="Figura 5 – Estrutura inicial do projeto gerado" width="289" height="300" /></a><p class="wp-caption-text">Figura 5 – Estrutura inicial do projeto gerado</p></div>
<h3>Alterando o projeto base gerado pelo assistente</h3>
<p>Além dos arquivos contidos para a execução do projeto, temos o <strong>pom.xml</strong>, o que denota que o projeto é gerado sobre a estrutura do <a href="http://maven.apache.org/index.html">Maven</a>.</p>
<p>Na view <strong>Package Explorer</strong>, se expandirmos <strong>Maven Dependencies</strong>, veremos as bibliotecas que o projeto necessita para ser executado. Neste momento, o projeto está funcionando tal como foi gerado pelo assistente.</p>
<div id="attachment_467" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-6.jpg" rel="lightbox[461]"><img class="size-medium wp-image-467" title="figura-6" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-6-300x106.jpg" alt="Figura 6 – Página inicial gerada pelo assistente utilizando o framework Spring MVC" width="300" height="106" /></a><p class="wp-caption-text">Figura 6 – Página inicial gerada pelo assistente utilizando o framework Spring MVC</p></div>
<p>Para compreendermos o que foi gerado, vejam o <a href="../2010/02/27/spring-mvc-3-0-na-pratica-parte-1/">primeiro artigo</a> que escrevi sobre o Spring MVC, ao qual explico a base do framework.</p>
<p>Entretanto, não vamos utilizar alguns dos arquivos criados. Selecione os seguintes diretórios e arquivos do projeto e os remova:</p>
<ul>
<li><strong>WelcomeController.java</strong></li>
<li><strong>WelcomeControllerTests.java</strong></li>
<li><strong>spring/</strong></li>
<li><strong>views/</strong></li>
<li><strong>urlrewrite.xml</strong></li>
</ul>
<h3>Adicionando outras bibliotecas ao projeto utilizando o Maven</h3>
<p>Embora boa parte das bibliotecas que precisamos no projeto já estejam disponíveis, precisamos adicionar a biblioteca JDBC do MySQL e as do Hibernate para trabalharmos com a JPA 2.</p>
<p>Abram o arquivo <strong>pom.xml </strong>, encontrado na view <strong>Package Explorer</strong>. No canto superior do lado direito, temos o ícone <strong>Show Advanced Tabs</strong>. Vamos exibir, ao clicar neste ícone, novas tabs que permitirão configurar novos repositórios.</p>
<div id="attachment_468" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-7.jpg" rel="lightbox[461]"><img class="size-medium wp-image-468" title="figura-7" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-7-300x66.jpg" alt="Figura 7 – Exibindo tabs avançadas do editor visual para o arquivo pom.xml" width="300" height="66" /></a><p class="wp-caption-text">Figura 7 – Exibindo tabs avançadas do editor visual para o arquivo pom.xml</p></div>
<h4>Adicionando um repositório</h4>
<p>Na aba <strong>Repositories</strong>, cliquem no botão <strong>Create</strong>. Preencham com <strong>JBoss Repo</strong> em <strong>Id</strong> e <strong>http://repository.jboss.com/maven2</strong>.  Este repositório será necessário para obtermos a última versão do Hibernate, importante para nosso projeto.</p>
<div id="attachment_469" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-8.jpg" rel="lightbox[461]"><img class="size-medium wp-image-469" title="figura-8" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-8-300x173.jpg" alt="Figura 8 – O repositório JBoss configurado" width="300" height="173" /></a><p class="wp-caption-text">Figura 8 – O repositório JBoss configurado</p></div>
<h4>Criando propriedades</h4>
<p>Caso o leitor não conheça o Maven ainda, já deve ter desconfiado que informamos um endereço para baixarmos as bibliotecas. Entretanto, quais desejamos?</p>
<p>Na aba <strong>Overview</strong>, em <strong>Properties</strong>, cliquem no botão <strong>Create</strong>. Na caixa de diálogo <strong>Add property</strong>, preencham como na <strong>Figura 9</strong>.</p>
<div id="attachment_470" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-9.jpg" rel="lightbox[461]"><img class="size-medium wp-image-470" title="figura-9" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-9-300x108.jpg" alt="Figura 9 – Criação da property da versão do Hibernate" width="300" height="108" /></a><p class="wp-caption-text">Figura 9 – Criação da property da versão do Hibernate</p></div>
<p>Adicione outra <strong>property</strong> preenchendo o diálogo como na <strong>Figura 10</strong>.</p>
<div id="attachment_471" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-10.jpg" rel="lightbox[461]"><img class="size-medium wp-image-471" title="figura-10" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-10-300x108.jpg" alt="Figura 10 – Criação da property da versão da JPA" width="300" height="108" /></a><p class="wp-caption-text">Figura 10 – Criação da property da versão da JPA</p></div>
<p>Por fim, adicionem mais uma <strong>property</strong> e preencham como a <strong>Figura 11</strong>.</p>
<div id="attachment_472" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-11.jpg" rel="lightbox[461]"><img class="size-medium wp-image-472" title="figura-11" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-11-300x108.jpg" alt="Figura 11 – Criação da property da versão da biblioteca JDBC do MySQL" width="300" height="108" /></a><p class="wp-caption-text">Figura 11 – Criação da property da versão da biblioteca JDBC do MySQL</p></div>
<h4>Criando as dependências</h4>
<p>As propriedades foram definidas para informar qual versão desejamos utilizar das bibliotecas que o Maven deverá baixar. Entretanto, precisamos configurar  as dependências.</p>
<p>Na aba <strong>Dependencies</strong>, cliquem no botão <strong>Create</strong> e preencham conforme a <strong>Figura 12</strong> ilustra.</p>
<div id="attachment_473" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-12.jpg" rel="lightbox[461]"><img class="size-medium wp-image-473" title="figura-12" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-12-300x207.jpg" alt="Figura 12 – A dependência do Hibernate" width="300" height="207" /></a><p class="wp-caption-text">Figura 12 – A dependência do Hibernate</p></div>
<p>Criem uma nova dependência e configurem conforme a <strong>Figura 13 </strong>demonstra.</p>
<div id="attachment_474" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-13.jpg" rel="lightbox[461]"><img class="size-medium wp-image-474" title="figura-13" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-13-300x207.jpg" alt="Figura 13  - A dependência da API JPA 2.0" width="300" height="207" /></a><p class="wp-caption-text">Figura 13  - A dependência da API JPA 2.0</p></div>
<p>Façam o mesmo processo preenchendo conforme a <strong>Figura 14</strong> exibe.</p>
<div id="attachment_475" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-14.jpg" rel="lightbox[461]"><img class="size-medium wp-image-475" title="figura-14" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-14-300x207.jpg" alt="Figura 14 – A dependência da biblioteca JDBC do MySQL" width="300" height="207" /></a><p class="wp-caption-text">Figura 14 – A dependência da biblioteca JDBC do MySQL</p></div>
<p>E para a parte de transações do Spring, configure a dependência  conforme a <strong>Figura 15</strong>.</p>
<div id="attachment_476" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-15.jpg" rel="lightbox[461]"><img class="size-medium wp-image-476" title="figura-15" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-15-300x147.jpg" alt="Figura 15 – A dependência da biblioteca para transações do Spring Framework" width="300" height="147" /></a><p class="wp-caption-text">Figura 15 – A dependência da biblioteca para transações do Spring Framework</p></div>
<p>Para trabalhar com banco de dados no Spring, configure a dependência  conforme a <strong>Figura 16</strong>.</p>
<div id="attachment_477" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-16.jpg" rel="lightbox[461]"><img class="size-medium wp-image-477" title="figura-16" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-16-300x147.jpg" alt="Figura 16 – A dependência da biblioteca jdbc do Spring Framework" width="300" height="147" /></a><p class="wp-caption-text">Figura 16 – A dependência da biblioteca jdbc do Spring Framework</p></div>
<p>Como estamos trabalhando com a JPA, o  Spring precisa da dependência  que configuramos no Maven conforme a <strong>Figura 17</strong>.</p>
<div id="attachment_478" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-17.jpg" rel="lightbox[461]"><img class="size-medium wp-image-478" title="figura-17" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-17-300x147.jpg" alt="Figura 17 – A dependência da biblioteca orm do Spring Framework" width="300" height="147" /></a><p class="wp-caption-text">Figura 17 – A dependência da biblioteca orm do Spring Framework</p></div>
<p>Ao salvar o arquivo, automaticamente o Maven entrará em ação trazendo as bibliotecas faltantes para o seu projeto. Vemos isto na view <strong>Console</strong>.</p>
<table border="1">
<tbody>
<tr>
<td><strong>Nota:</strong> Detalhes de como o Maven funciona não serão mostrados neste artigo. É importante lembramos que o objetivo deste artigo não é ensinar a trabalhar com Maven, seja através do arquivo pom.xml ou pelo Eclipse IDE.</td>
</tr>
</tbody>
</table>
<h3>Um CRUD com Spring MVC utilizando JPA 2.0</h3>
<p>O projeto neste artigo será baseado em apenas uma entidade, suficiente mostrar a vocês a integração entre as duas tecnologias no desenvolvimento.</p>
<p>Iremos agora modificar o projeto criado automaticamente pelo assistente.</p>
<h3>A entidade Contato</h3>
<p>Teremos para o exemplo apenas uma entidade, chamada de Contato. Esta entidade, trabalhará com uma tabela contato, no qual possui quatro atributos, sendo o atributo <strong>id</strong> o único que será gerado automaticamente. A <strong>Listagem 1</strong> exibe  a entidade que será usada no exemplo.</p>
<p><strong>Listagem 1. A entidade Contato.</strong></p>
<pre class="brush:java">package br.com.integrator;

import javax.persistence.*;

@Entity

@Table(name = "contato")

public class Contato {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private Long id;

private String nome;

private String email;

private String telefone;

//getters and setters

}</pre>
<p>Para fazê-la, cliquem com o direito do mouse sobre o pacote <strong>br.com.integrator</strong> e selecionem, no menu de contexto, o item <strong>New&gt;Class</strong>.</p>
<div id="attachment_479" class="wp-caption alignnone" style="width: 278px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-18.jpg" rel="lightbox[461]"><img class="size-medium wp-image-479" title="figura-18" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-18-268x300.jpg" alt="Figura 18 – Criação da classe Contato" width="268" height="300" /></a><p class="wp-caption-text">Figura 18 – Criação da classe Contato</p></div>
<h3>Acessando os dados</h3>
<p>O acesso aos dados é feito pelo padrão DAO (<strong>Listagem 2</strong>), com a adição de anotações do Spring Framework.  No princípio, adicionamos a anotação <strong>@Repository(&#8220;contatoDao&#8221;)</strong>, ao qual indica ao Spring Framework que se trata de um DAO. Veremos mais a respeito adiante, na configuração final do Spring.</p>
<p>Utilizamos a anotação <strong>@Transactional</strong>, para fazer o controle transacional e a anotação <strong>@PersistenceContext</strong>, permitindo assim com que o Spring injete um <strong>EntityManager</strong> no serviço quando instanciado. Esta anotação pode ser colocada no atributo ou método setter. Com a esta injeção, temos um comportamento similar ao oferecido pelo EJB 3, incluindo transações, só que sem a necessidade de um contêiner EJB para isso.</p>
<p>Para criar a classe da <strong>Listagem 2</strong>, criem uma nova classe e coloquem o pacote <strong>br.com.integrator.dao</strong> e preencham o nome da classe como <strong>ContatoDAO</strong>.</p>
<div id="attachment_480" class="wp-caption alignnone" style="width: 257px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-19.jpg" rel="lightbox[461]"><img class="size-medium wp-image-480" title="figura-19" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-19-247x300.jpg" alt="Figura 19 – Criação da classe ContatoDAO" width="247" height="300" /></a><p class="wp-caption-text">Figura 19 – Criação da classe ContatoDAO</p></div>
<p><strong>Listagem 2. A classe ContatoDAO.</strong></p>
<pre class="brush:java">package br.com.integrator.dao;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Transactional;

import br.com.integrator.Contato;

@Repository("contatoDao")

public class ContatoDAO{

protected EntityManager entityManager;

public ContatoDAO() {

}

@PersistenceContext

public void setEntityManager(EntityManager entityManager) {

this.entityManager = entityManager;

}

public Contato find(Long id) {

return entityManager.find(Contato.class, id);

}

@Transactional

public void persist(Contato contato) {

entityManager.persist(contato);

}

@Transactional

public void merge(Contato contato) {

entityManager.merge(contato);

}

@Transactional

public void remove(Contato contato) {

entityManager.remove(contato);

}

@SuppressWarnings("unchecked")

public List&lt;Contato&gt; findAll() {

return entityManager.createQuery("SELECT c FROM Contato c").getResultList();

}

}</pre>
<h3>Controlando como o aplicativo funciona</h3>
<p>A classe ContatoController, que será criada no pacote <strong>br.com.integrator.web</strong>, exibida na <strong>Listagem 3</strong>, lida com as requisições do cliente, controlando o rumo que será dado na chamada a uma determinada view.</p>
<p><strong>Listagem 3. A classe ContatoController.</strong></p>
<pre class="brush:java">package br.com.integrator.web;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.*;

import br.com.integrator.dao.ContatoDAO;

import br.com.integrator.Contato;

@Controller

@RequestMapping("/contato/**")

public class ContatoController {

@Autowired

private ContatoDAO contatoDao;

@RequestMapping(value = "/contato/{id}", method = RequestMethod.GET)

public String show(@PathVariable("id") Long id, ModelMap modelMap) {

modelMap.addAttribute("contato", contatoDao.find(id));

return "contato/show";

}

@RequestMapping(value = "/contato", method = RequestMethod.GET)

public String list(ModelMap modelMap) {

modelMap.addAttribute("contatos", contatoDao.findAll());

return "contato/list";

}

@RequestMapping(value = "/contato/{id}", method = RequestMethod.DELETE)

public String delete(@PathVariable("id") Long id) {

contatoDao.remove(contatoDao.find(id));

return "redirect:/contato";

}

@RequestMapping(value = "/contato/form", method = RequestMethod.GET)

public String form(ModelMap modelMap) {

modelMap.addAttribute("contato", new Contato());

return "contato/create";

}

@RequestMapping(value = "/contato", method = RequestMethod.POST)

public String create(@ModelAttribute("contato") Contato contato) {

contatoDao.persist(contato);

return "redirect:/contato";

}

@RequestMapping(value = "/contato/{id}/form", method = RequestMethod.GET)

public String updateForm(@PathVariable("id") Long id, ModelMap modelMap) {

modelMap.addAttribute("contato", contatoDao.find(id));

return "contato/update";

}

@RequestMapping(method = RequestMethod.PUT)

public String update(@ModelAttribute("contato") Contato contato) {

contatoDao.merge(contato);

return "redirect:/contato";

}

}</pre>
<p>Introduzida na versão do Spring MVC 2.5, podemos declarar uma classe como sendo a controller do framework simplesmente utilizando a anotação <strong>@Controller</strong>, de <em>org.springframework.stereotype.Controller</em>. Esta anotação permite que o Spring faça seu “scan” automaticamente através do elemento <em>&lt;context:component-scan&gt;</em>.</p>
<p>Com a anotação <strong>@RequestMapping</strong>, encontrada após <strong>@Controller</strong>, definimos o caminho HTTP que será utilizado na aplicação, sendo mapeada pela classe. Na prática, todas as chamadas na aplicação contendo o <em>“/contato/*”</em> serão analisadas pela classe controller.</p>
<p>O suporte a RESTful foi completamente adicionado no Spring MVC 3, onde determinamos o seu comportamento através também da anotação <strong>@ResquestMapping</strong>. Agora, o servlet Spring Dispatcher suporta os seguintes métodos HTTP: GET, HEAD, POST, PUT e DELETE.</p>
<p>Para efeitos comparativos, se colocarmos cada um dos métodos HTTP ao lado de um simples aplicativo que executa as quatro operações básicas (CRUD), teríamos o GET como sendo o READ, o POST como CREATE, o PUT como UPDATE e o DELETE como por ele mesmo.</p>
<p>Infelizmente, os navegadores não compreendem nada além de GET e POST em formulários HTML. Ao declarar no formulário do Spring MVC que o método de submissão é o DELETE, por exemplo, este se transformará em um método POST, para que o navegador entenda, só que contendo um campo oculto com o valor DELETE. Infelizmente este feito não é mágico e no Spring MVC esta característica só é possível porque configuramos o filtro <em>org.springframework.web.filter.HiddenHttpMethodFilter</em> no arquivo <em>web.xml</em>(veja a <strong>Listagem 4</strong>).</p>
<p>Ao submeter o formulário, a anotação <strong>@ResquestMapping</strong> verifica o caminho e o método submetido. Imagine que <strong>@ResquestMapping </strong> recebe uma chamada HTTP com o caminho <em>“/contato/1”</em>, seria apenas uma visualização do contato <em>número 1</em> se <em><strong>RequestMethod.DELETE</strong></em> não fosse acionado, disparando automaticamente o método <strong>delete()</strong>, que tem como objetivo remover o contato. Esta remoção é feita pelo <strong>remove() </strong>do DAO.</p>
<p>Através de templates URI, a anotação <strong>@PathVariable</strong> determina à variável que será recebida e transmitida para o método em questão. Se quisermos excluir um determinado contato, enviamos ao navegador o caminho <em>“/contato/1”</em>, mas que será traduzido como <em>“contato?id=1”</em>. Como parâmetro, a variável pode ser convertida para um determinado tipo em sua captura, assim como renomeada.</p>
<p>A conclusão de cada operação no controller pode ser feita através de um redirecionamento, enviando a string <em>“redirect:/caminho”</em> ou simplesmente retornando o caminho que deseja exibir.</p>
<h3>A configuração do web.xml</h3>
<p>O arquivo <em>web.xml</em> precisa de alguns ajustes, uma vez que este já possui configurações iniciais para trabalhar com o Spring MVC. A <strong>Listagem 4</strong> exibe o arquivo <strong>web.xml</strong> na íntegra.</p>
<p><strong>Listagem 4. O web.xml.</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;

&lt;display-name&gt;SpringMVC&lt;/display-name&gt;

&lt;listener&gt;

&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;

&lt;/listener&gt;

&lt;servlet&gt;

&lt;servlet-name&gt;ContatoManager&lt;/servlet-name&gt;

&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;

&lt;/servlet&gt;

&lt;servlet-mapping&gt;

&lt;servlet-name&gt;ContatoManager&lt;/servlet-name&gt;

&lt;url-pattern&gt;/&lt;/url-pattern&gt;

&lt;/servlet-mapping&gt;

&lt;servlet-mapping&gt;

&lt;servlet-name&gt;default&lt;/servlet-name&gt;

&lt;url-pattern&gt;/static/*&lt;/url-pattern&gt;

&lt;/servlet-mapping&gt;

&lt;!-- habilitar o suporte REST do Spring 3.0 --&gt;

&lt;filter&gt;

&lt;filter-name&gt;httpMethodFilter&lt;/filter-name&gt;

&lt;filter-class&gt;org.springframework.web.filter.HiddenHttpMethodFilter&lt;/filter-class&gt;

&lt;/filter&gt;

&lt;!-- Permite colocar um campo oculto para PUT e DELETE --&gt;

&lt;filter-mapping&gt;

&lt;filter-name&gt;httpMethodFilter&lt;/filter-name&gt;

&lt;servlet-name&gt;ContatoManager&lt;/servlet-name&gt;

&lt;/filter-mapping&gt;

&lt;filter&gt;

&lt;filter-name&gt;OpenEntityManagerInViewFilter&lt;/filter-name&gt;

&lt;filter-class&gt;

org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter

&lt;/filter-class&gt;

&lt;/filter&gt;

&lt;filter-mapping&gt;

&lt;filter-name&gt;OpenEntityManagerInViewFilter&lt;/filter-name&gt;

&lt;url-pattern&gt;/*&lt;/url-pattern&gt;

&lt;/filter-mapping&gt;

&lt;session-config&gt;

&lt;session-timeout&gt;10&lt;/session-timeout&gt;

&lt;/session-config&gt;

&lt;welcome-file-list&gt;

&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;

&lt;/welcome-file-list&gt;

&lt;/web-app&gt;</pre>
<p>Para o Spring MVC funcionar, utilizamos o servlet org.springframework.web.servlet.DispatcherServlet, configurado no arquivo <strong>web.xml</strong> da aplicação. Por padrão, o Spring olha beans em arquivos cujo começo possui o mesmo nome do Servlet configurado, seguido de <em>-servlet.xml</em>. Para melhor entendimento, o nome ContatoManager, dado no elemento <em>&lt;servlet-name/&gt;</em>, fará com que o Spring procure por um arquivo chamado <strong>ContatoManager-servlet.xml</strong>.</p>
<p>Evidentemente ele não é o único item que deve ser configurado no arquivo, já que, se pretendemos trabalhar com REST, como já foi citado anteriormente, precisamos adicionar o filtro pela classe org.springframework.web.filter.HiddenHttpMethodFilter.</p>
<p>Para trabalhar com a JPA, utilizamos o filtro org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter, do Spring. Entretanto, deixarei para falar sobre este filtro em outra ocasião.</p>
<h3>O arquivo persistence.xml</h3>
<p>A <strong>Listagem 5</strong> mostra o arquivo <strong>persistence.xml</strong>, que configura como <em>provider</em> o Hibernate.  Este arquivo deve ser criado dentro do diretório <strong>META-INF</strong>. Este diretório será criado em <strong>src/main/Java</strong>. Veja como ficará em seu projeto através da <strong>Figura 20</strong>.</p>
<div id="attachment_481" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-20.jpg" rel="lightbox[461]"><img class="size-medium wp-image-481" title="figura-20" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-20-300x79.jpg" alt="Figura 20 – Localização do arquivo persistence.xml dentro de META-INF" width="300" height="79" /></a><p class="wp-caption-text">Figura 20 – Localização do arquivo persistence.xml dentro de META-INF</p></div>
<p><strong>Listagem 5. Configuração do arquivo persistence.xml.</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&gt;

&lt;persistence-unit name="ContatoPU" transaction-type="RESOURCE_LOCAL"&gt;

&lt;class&gt;br.com.integrator.Contato&lt;/class&gt;

&lt;properties&gt;

&lt;property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/springmvc"&gt;&lt;/property&gt;

&lt;property name="javax.persistence.jdbc.user" value="edson"&gt;&lt;/property&gt;

&lt;property name="javax.persistence.jdbc.password" value="integrator"&gt;&lt;/property&gt;

&lt;property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"&gt;&lt;/property&gt;

&lt;property name="hibernate.show_sql" value="true" /&gt;

&lt;property name="hibernate.format_sql" value="true" /&gt;

&lt;property name="hibernate.hbm2ddl.auto" value="create"/&gt;

&lt;/properties&gt;

&lt;/persistence-unit&gt;

&lt;/persistence&gt;</pre>
<h3>Configurando o Spring</h3>
<p>Revisando até o momento o que criamos, temos um DAO simples que se comunica com o banco de dados através da JPA, utilizando o Hibernate como provider.</p>
<p>Este DAO será executado pelo Controller do Spring MVC, também já configurado.</p>
<p>Para trabalhar com todas estas informações, dividiremos as configurações em dois arquivos, separando suas responsabilidades.</p>
<p>O primeiro arquivo, chamado de <strong>applicationContext.xml</strong> (<strong>Listagem 6</strong>), será o utilizado para a trabalhar com a injeção de dependências na classe DAO, lidando com as características da JPA. Este arquivo deve ser criado dentro do diretório <strong>WEB-INF</strong>.</p>
<p>Para criá-lo, cliquem com o direito do mouse em src/main/webapp/<strong>WEB-INF</strong> e selecionem <strong>New&gt;Spring Bean Configuration File</strong> no menu de contexto.</p>
<p>Na caixa de diálogo <strong>Create a new Spring Bean Definition file</strong> coloque o nome do arquivo de <strong>applicationContext</strong> (<strong>Figura 21</strong>) e clique no botão <strong>Next</strong>.</p>
<div id="attachment_482" class="wp-caption alignnone" style="width: 299px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-21.jpg" rel="lightbox[461]"><img class="size-medium wp-image-482" title="figura-21" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-21-289x300.jpg" alt="Figura 21 – Criação do arquivo applicationContext.xml pelo assistente" width="289" height="300" /></a><p class="wp-caption-text">Figura 21 – Criação do arquivo applicationContext.xml pelo assistente</p></div>
<p>Na segunda etapa, mantenha o <strong>beans – http://www.springframework.org/schema/beans</strong> e mantenha selecionado o item XSD como mostrado na <strong>Figura 22</strong>.</p>
<div id="attachment_483" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-22.jpg" rel="lightbox[461]"><img class="size-medium wp-image-483" title="figura-22" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-22-300x277.jpg" alt="Figura 22 – Seleção do namespace beans" width="300" height="277" /></a><p class="wp-caption-text">Figura 22 – Seleção do namespace beans</p></div>
<p>Ainda na segunda etapa, mantenha o <strong>context – http://www.springframework.org/schema/context</strong><em> </em>e mantenha selecionado o item XSD como mostrado na <strong>Figura 23</strong>.</p>
<div id="attachment_484" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-23.jpg" rel="lightbox[461]"><img class="size-medium wp-image-484" title="figura-23" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-23-300x277.jpg" alt="Figura 23 – Seleção do namespace context" width="300" height="277" /></a><p class="wp-caption-text">Figura 23 – Seleção do namespace context</p></div>
<p>A última opção que selecionaremos na segunda etapa será o <strong>tx – </strong><strong>http://www.springframework.org/schema/tx</strong><em> </em>e mantenha selecionado o item XSD como mostrado na <strong>Figura 24</strong>. Confirmem no botão <strong>Finish</strong>.</p>
<div id="attachment_485" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-24.jpg" rel="lightbox[461]"><img class="size-medium wp-image-485" title="figura-24" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-24-300x277.jpg" alt="Figura 24 – Seleção do namespace tx" width="300" height="277" /></a><p class="wp-caption-text">Figura 24 – Seleção do namespace tx</p></div>
<p>Caso tenhamos esquecido de selecionar algum namespace, não tem importância, pois ao finalizar o assistente, o editor do arquivo de configuração do Spring se abre. Neste caso, vamos adicionar um último namespace. Cliquem na aba <strong>Namespaces</strong> e marquem o namespace <strong>mvc &#8211; http://www.springframework.org/schema/mvc</strong> e selecionem o XSD como mostrado na <strong>Figura 25</strong>.</p>
<div id="attachment_486" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-25.jpg" rel="lightbox[461]"><img class="size-medium wp-image-486" title="figura-25" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-25-300x90.jpg" alt="Figura 25 – Seleção do namespace mvc" width="300" height="90" /></a><p class="wp-caption-text">Figura 25 – Seleção do namespace mvc</p></div>
<p>O conteúdo completo do arquivo <strong>applicationContext.xml</strong> está na <strong>Listagem 6</strong>.</p>
<p><strong>Listagem 6. Configuração do arquivo applicationContext.xml.</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;

&lt;bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&gt;

&lt;property value="ContatoPU" /&gt;

&lt;/bean&gt;

&lt;context:component-scan base-package="br.com.integrator"/&gt;

&lt;bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&gt;

&lt;property name="entityManagerFactory" ref="entityManagerFactory"/&gt;

&lt;/bean&gt;

&lt;mvc:annotation-driven/&gt;

&lt;tx:annotation-driven /&gt;

&lt;context:annotation-config /&gt;

&lt;/beans&gt;</pre>
<p>No Spring MVC, para determinar a classe controladora, utilizamos a anotação @Controller. Entretanto, para que seja possível detectar esta anotação, o Spring utiliza o elemento <strong>&lt;context:component-scan /&gt;</strong>, onde indicamos  o pacote em que ele pode verificar. Este recurso é chamado de <strong>Classpath scanning</strong>, que permite ao Spring ler as classes encontradas no pacote indicado da aplicação em busca das que estão anotadas. Isso evita que tenhamos de declarar estas classes no XML. Ao fazer este “scanning”, as classes são passadas por um filtro e então a definição de um bean é criada para cada uma delas. Evidentemente que este filtro é determinado pelas anotações, onde não existem apenas as anotações que utilizamos neste exemplo,  mas de outras mais que temos como referencia para o framework: @Component, @Service, @Controller e @Repository (que foi introduzida no Spring 2.0). Você pode também criar suas próprias anotações e filtros para declarar os componentes.</p>
<p>Para o Spring trabalhar com a JPA, onde a execução ocorre em ambientes Java EE, utilizamos a factory org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean:</p>
<pre class="brush:xml">&lt;bean

class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&gt;

&lt;property name="persistenceUnitName" value="ContatoPU" /&gt;

&lt;/bean&gt;</pre>
<p>Com a propriedade de LocalContainerEntityManagerFactoryBean especificamos o nome  da <em>persistence unit</em> do arquivo <strong>persistence.xml</strong>. É neste arquivo que temos as configurações de acesso ao banco de dados pela JPA para realizar as operações de persistência.</p>
<p>Para a configuração do controle transacional em uma aplicação baseada no Spring, é necessário declarar um gerenciador que, neste caso, será a classe org.springframework.orm.jpa.JpaTransactionManager. Esta classe é utilizada para trabalhar com a JPA, independente de provedor ORM. A declaração da classe é ilustrada no trecho a seguir:</p>
<pre class="brush:xml">&lt;bean

class="org.springframework.orm.jpa.JpaTransactionManager"&gt;

&lt;property name="entityManagerFactory" ref="entityManagerFactory" /&gt;

&lt;/bean&gt;</pre>
<p>JpaTransactionManager precisa de qualquer implementação de javax.persistence.EntityManagerFactory para colaborar com EntityManager produzido pela fabrica, para conduzir transações. A classe JpaTransactionManager é recomendada para aplicações que utilizam apenas uma EntityManager.</p>
<p>Para que não tenhamos que fazer injeção de dependência do EntityManager em todos os nossos DAOs, utilizamos o elemento <strong>&lt;context:annotation-config /&gt;</strong>, que procura todas as classes anotadas com @PersistenceContext, @Autowired (que veremos mais adiante), entre outros, e faz a injeção de dependência automaticamente.</p>
<p>Por termos configurado as transações no DAO, por meio da utilização da anotação @Transactional, o elemento <strong>&lt;tx:annotation-driven&gt;</strong> foi utilizado.</p>
<p>Como se não bastasse, temos também a parte do Spring MVC, que utiliza o elemento <strong>mvc:annotation-driven /&gt;</strong>, permitindo enviar as requisições das classes que possuem a anotação <strong>@Controller</strong>.</p>
<h3>Configurando o Spring MVC</h3>
<p>O segundo arquivo, com o nome de <strong>ContatoManager-servlet.xml</strong> (<strong>Listagem 7</strong>), será o responsável por configurar o caminho das views e a tecnologia empregada no projeto do Spring MVC.</p>
<p>Para criá-lo, cliquem com o direito do mouse sobre o diretório src/main/webapp/<strong>WEB-INF</strong> e selecionem <strong>New&gt;Spring Bean Configuration File</strong> no menu de contexto.</p>
<p>Na caixa de diálogo <strong>Create a new Spring Bean Definition file</strong> coloquem o nome do arquivo de <strong>ContatoManager-servlet</strong> (<strong>Figura 26</strong>) e clique no botão <strong>Next</strong>.</p>
<div id="attachment_487" class="wp-caption alignnone" style="width: 290px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-26.jpg" rel="lightbox[461]"><img class="size-medium wp-image-487" title="figura-26" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-26-280x300.jpg" alt="Figura 26 – Criação do arquivo ContatoManager-servlet.xml pelo assistente" width="280" height="300" /></a><p class="wp-caption-text">Figura 26 – Criação do arquivo ContatoManager-servlet.xml pelo assistente</p></div>
<p>Na segunda etapa, mantenham apenas o item <strong>beans – http://www.springframework.org/schema/beans</strong> selecionado como mostrado na <strong>Figura 27</strong>. Finalizem o assistente pelo botão <strong>Finish</strong>.</p>
<div id="attachment_488" class="wp-caption alignnone" style="width: 298px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-27.jpg" rel="lightbox[461]"><img class="size-medium wp-image-488" title="figura-27" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-27-288x300.jpg" alt="Figura 27 – Seleção do namespace beans" width="288" height="300" /></a><p class="wp-caption-text">Figura 27 – Seleção do namespace beans</p></div>
<p>A <strong>Listagem 7</strong> exibe, na íntegra, o conteúdo do arquivo <strong>ContatoManager-servlet.xml</strong>.</p>
<p><strong>Listagem 7. Configuração do arquivo ContatoManager-servlet.xml.</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt;

&lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;

&lt;property value="/WEB-INF/jsp/"/&gt;

&lt;property value=".jsp"/&gt;

&lt;/bean&gt;

&lt;/beans&gt;</pre>
<p>O Spring MVC possui um suporte a inúmeros tipos de views, utilizando diversos tipos de tecnologias, como JSP, FreeMarker, JasperReports, Velocity, XML, XSLT e outros. Quando vamos criar um projeto Spring MVC, podemos utilizar uma ou diversas ao mesmo tempo, o que significa que é possível apresentar uma página em HTML gerada pelo JSP contendo os dados vindos do banco de dados através do uso do Spring MVC e também um XML contendo os mesmos dados, com uma pequena alteração de extensão no navegador.</p>
<p>Com a classe org.springframework.web.servlet.view.InternalResourceViewResolver pré-fixamos o caminho das páginas em <em>&#8220;/WEB-INF/jsp/&#8221;</em> e damos o sufixo, sendo <em>&#8220;.jsp&#8221;</em>. Para o conteúdo das páginas, temos InternalResourceViewResolver, uma subclasse de UrlBasedViewResolver, que suporta JSTL, onde utilizaremos em nossas views.</p>
<table border="1">
<tbody>
<tr>
<td><strong>Atenção:</strong> Como boa prática recomendada pelo Spring, coloquem as páginas JSP dentro do diretório <strong>WEB-INF</strong>, impedindo assim seu acesso direto através da URL.</td>
</tr>
</tbody>
</table>
<h3>As views</h3>
<p>Criaremos agora três páginas que representarão nosso CRUD. Estas páginas serão criadas dentro de um diretório chamado <strong>contato</strong>, que ficará dentro de <strong>jsp</strong> em <strong>WEB-INF</strong>. Os diretórios <strong>jsp </strong>e <strong>contato</strong> ainda não foram criados. Para criá-los, clique com o direito do mouse sobre <strong>src/main/webapp/WEB-INF</strong> e selecione <strong>New&gt;Folder</strong> no menu  de contexto.</p>
<div id="attachment_489" class="wp-caption alignnone" style="width: 218px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-28.jpg" rel="lightbox[461]"><img class="size-medium wp-image-489" title="figura-28" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-28-208x300.jpg" alt="Figura 28 -  Os diretórios jsp e contato criados dentro de WEB-INF do projeto" width="208" height="300" /></a><p class="wp-caption-text">Figura 28 -  Os diretórios jsp e contato criados dentro de WEB-INF do projeto</p></div>
<h4>O formulário de cadastro</h4>
<p>Se preferir, mude a perspectiva do Eclipse para Java EE, assim será possível clicar com o direito do mouse sobre o diretório e selecionar, no menu de contexto, o item <strong>New&gt;JSP File</strong>. O assistente de criação de páginas JSP pode lhe ajudar com um template Basico. Por fim, dê o nome de <strong>create.jsp</strong> no arquivo e coloque o conteúdo similar ao mostrado na <strong>Listagem 8</strong>.</p>
<p><strong>Listagem 8. A página create.jsp.</strong></p>
<pre class="brush:xhtml">&lt;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%&gt;

&lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt;

&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt;

&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;

&lt;style type="text/css" media="screen"&gt;

@import url("&lt;c:url value="/static/styles/style.css"/&gt;");

&lt;/style&gt;

&lt;title&gt;Cadastrar&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div id="wrap"&gt;

&lt;div&gt;

&lt;%@ include file="/menu.jsp" %&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;div&gt;

&lt;c:url var="url" value="/contato" /&gt;

&lt;form:form action="${url}" method="POST" modelAttribute="contato"&gt;

&lt;div&gt;

&lt;label for="nome"&gt;Nome:&lt;/label&gt;

&lt;form:input cssStyle="width:250px" maxlength="30" path="nome" size="30"/&gt;

&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;

&lt;label for="email"&gt;Email:&lt;/label&gt;

&lt;form:input cssStyle="width:250px" maxlength="30" path="email" size="30"/&gt;

&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;

&lt;label for="telefone"&gt;Telefone:&lt;/label&gt;

&lt;form:input cssStyle="width:250px" maxlength="30" path="telefone" size="20"/&gt;

&lt;/div&gt;

&lt;br/&gt;

&lt;div class="submit"&gt;

&lt;input value="Criar Contato"/&gt;

&lt;/div&gt;

&lt;/form:form&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;</pre>
<p>Podemos ter uma idéia de como ficará a página <strong>create.jsp</strong> através da <strong>Figura 29</strong>.</p>
<div id="attachment_490" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-29.jpg" rel="lightbox[461]"><img class="size-medium wp-image-490" title="figura-29" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-29-300x133.jpg" alt="Figura 29 – A página create.jsp" width="300" height="133" /></a><p class="wp-caption-text">Figura 29 – A página create.jsp</p></div>
<p>Analisando o <strong>web.xml</strong>, veremos o elemento <strong>&lt;servlet-mapping/&gt;</strong>, que define onde a aplicação encontrará os conteúdos estáticos do aplicativo. O Servlet <strong>default</strong>, utilizando neste caso, pertence as configurações padrão do Tomcat, responsável por servir conteúdos estáticos de aplicações web. Mesmo que seus arquivos não estejam em um diretório com este nome, é necessário acrescentá-lo como parte do caminho. Isso inclui imagens e folhas de estilo<a name="_ftnref"></a><a href="#_ftn1">[1]</a>.</p>
<p>Para criar estas páginas, utilizamos tags da biblioteca JSTL e tags do próprio Spring. No caso do Spring, as tags <strong>&lt;form/&gt;</strong> possibilitam que tenhamos um formulário ligado ao controller. Para utilizar estas tags, devemos acrescentar a seguinte <em>taglib</em>:</p>
<p><strong>&lt;%@ taglib prefix=&#8221;form&#8221; uri=&#8221;http://www.springframework.org/tags/form&#8221; %&gt;</strong></p>
<p>Na construção dos formulários para inserir e atualizar, utilizamos a tag <strong>&lt;form:form/&gt;</strong> que possui um atributo <strong>modelAttribute</strong>,  ligando o formulário ao parâmetro do método que executa sua ação. O atributo <strong>method</strong> indica qual o tipo de ação será feita no controller.</p>
<p>A tag <strong>&lt;form:input/&gt;</strong> possui o atributo <strong>path</strong> com o valor correspondente aos atributos existentes no bean Contato.</p>
<h4>A página que lista todos os cadastros e permite a exclusão</h4>
<p>Para a listagem de todos os cadastros efetuados, criaremos uma página chamada <strong>list.jsp</strong>, contendo as mesmas informações existentes na <strong>Listagem 9</strong>.</p>
<p>Junto a listagem, teremos a possibilidade de excluir o cadastro diretamente por esta página.</p>
<div id="attachment_491" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-30.jpg" rel="lightbox[461]"><img class="size-medium wp-image-491" title="figura-30" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-30-300x125.jpg" alt="Figura 30 – A página list.jsp" width="300" height="125" /></a><p class="wp-caption-text">Figura 30 – A página list.jsp</p></div>
<p><strong>Listagem 9. A página list.jsp.</strong></p>
<pre class="brush:xhtml">&lt;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%&gt;

&lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt;

&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt;

&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;

&lt;style media="screen"&gt;

@import url("&lt;c:url value="/static/styles/style.css"/&gt;");

&lt;/style&gt;

&lt;title&gt;Listar&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div&gt;

&lt;div id="menu"&gt;

&lt;%@ include file="/menu.jsp" %&gt;

&lt;/div&gt;

&lt;div id="main"&gt;

&lt;div&gt;

&lt;c:if test="${not empty contatos}"&gt;

&lt;table width="600px"&gt;

&lt;tr&gt;

&lt;thead&gt;

&lt;th&gt;Id&lt;/th&gt;

&lt;th&gt;Nome&lt;/th&gt;

&lt;th&gt;E-mail&lt;/th&gt;

&lt;th&gt;Telefone&lt;/th&gt;

&lt;th&gt;Atualizar&lt;/th&gt;

&lt;th&gt;Excluir&lt;/th&gt;

&lt;/thead&gt;

&lt;/tr&gt;

&lt;c:forEach items="${contatos}" var="contato"&gt;

&lt;c:url var="url" value="/contato/${contato.id}" /&gt;

&lt;tr&gt;

&lt;td&gt;${contato.id}&lt;/td&gt;

&lt;td&gt;${contato.nome}&lt;/td&gt;

&lt;td&gt;${contato.email}&lt;/td&gt;

&lt;td&gt;${contato.telefone}&lt;/td&gt;

&lt;td&gt;

&lt;form:form action="${url}/form" method="GET"&gt;

&lt;input alt="Atualizar Contato" src="&lt;c:url value="/static/images/update.png"/&gt;" title="Atualizar Contato" value="Atualizar Contato"/&gt;

&lt;/form:form&gt;

&lt;/td&gt;

&lt;td&gt;

&lt;form:form action="${url}" method="DELETE"&gt;

&lt;input alt="Excluir Contato" src="&lt;c:url value="/static/images/delete.png"/&gt;" title="Excluir Contato" value="Excluir Contato"/&gt;

&lt;/form:form&gt;

&lt;/td&gt;

&lt;/tr&gt;

&lt;/c:forEach&gt;

&lt;/table&gt;

&lt;/c:if&gt;

&lt;c:if test="${empty contatos}"&gt;Não há contatos cadastrados.&lt;/c:if&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;</pre>
<p>O Spring MVC gera um Map através de sua classe <strong>org.springframework.ui.ModelMap</strong>, onde capturamos os valores retornados pelo método <strong>findAll()</strong>, de <strong>ContatoDAO</strong>. Este Map é capturado pela view, no clássico esquema definido pelo MVC.</p>
<p>No caso da listagem de contatos, este Map, definido como <strong>contatos</strong> no método <strong>list()</strong>, de <strong>ContatoController</strong>, é varrido por um loop criado pela tag JSTL &lt;c:forEach /&gt; no seguinte trecho:</p>
<p>&lt;c:forEach items=&#8221;${contatos}&#8221; var=&#8221;post&#8221;&gt;</p>
<p>Na listagem dos contatos, em uma das tags &lt;form:form/&gt;, vemos em um de seus atributos method o valor <strong>DELETE</strong>, definido como a ação de exclusão de contatos.</p>
<p>Como os navegadores não reconhecem o envio de formulários além dos métodos POST e GET, precisamos de uma ajuda do Spring Framework para fazer a operação DELETE. O que o Spring MVC fará é traduzir o valor do atributo desta tag, na geração do HTML, da seguinte forma:</p>
<p>&lt;form … method=&#8221;post&#8221;&gt;</p>
<p>&lt;input type=&#8221;hidden&#8221; value=&#8221;DELETE&#8221;/&gt;</p>
<p>Observe que ele criou uma tag oculta HTML na renderização da página com um nome <em>_method</em> e com o valor DELETE. Esta simples adição permitirá a ação de excluir pela classe PostController.</p>
<h4>A página de atualização de dados</h4>
<p>A última página que teremos no CRUD é a de atualizar (<strong>update.jsp</strong>), similar ao de adicionar dados, exceto pelo fato de receber os dados vindos do banco de dados para serem exibidos.</p>
<p><strong>Listagem 10. A página update.jsp.</strong></p>
<pre class="brush:xhtml">&lt;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%&gt;

&lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt;

&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt;

&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;

&lt;style type="text/css" media="screen"&gt;

@import url("&lt;c:url value="/static/styles/style.css"/&gt;");

&lt;/style&gt;

&lt;title&gt;Atualizar&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div id="wrap"&gt;

&lt;div&gt;

&lt;%@ include file="/menu.jsp" %&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;div&gt;

&lt;c:url var="url" value="/contato/${contato.id}" /&gt;

&lt;form:form action="${url}" method="PUT" modelAttribute="contato"&gt;

&lt;div&gt;

&lt;label for="nome"&gt;Nome:&lt;/label&gt;

&lt;form:input cssStyle="width:250px" maxlength="30" path="nome" size="30"/&gt;

&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;

&lt;label for="email"&gt;Email:&lt;/label&gt;

&lt;form:input cssStyle="width:250px" maxlength="30" path="email" size="30"/&gt;

&lt;/div&gt;

&lt;br/&gt;

&lt;div&gt;

&lt;label for="telefone"&gt;Telefone:&lt;/label&gt;

&lt;form:input cssStyle="width:250px" maxlength="30" path="telefone" size="20"/&gt;

&lt;/div&gt;

&lt;br/&gt;

&lt;div class="submit"&gt;

&lt;input value="Atualizar Contato"/&gt;

&lt;/div&gt;

&lt;form:hidden path="id"/&gt;

&lt;/form:form&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;</pre>
<p>Similar ao que ocorre com a listagem de contatos, temos no formulário da página de atualização o valor <strong>PUT</strong> para o atributo <strong>method</strong>. Novamente, o Spring Framework irá gerar um campo oculto, em HTML, contendo esta informação e transmitindo ao navegador o HTML como ele já o conhece.</p>
<div id="attachment_492" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-31.jpg" rel="lightbox[461]"><img class="size-medium wp-image-492" title="figura-31" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-31-300x132.jpg" alt="Figura 31  - A página update.jsp" width="300" height="132" /></a><p class="wp-caption-text">Figura 31  - A página update.jsp</p></div>
<h4>As páginas que não fazem parte do CRUD</h4>
<p>O menu e a página inicial não fazem parte do CRUD e, portanto, serão apenas apresentadas aqui com seus códigos para completar o exemplo.</p>
<p>A página <strong>index.jsp</strong> deverá ser criada em  <strong>webapps</strong>:</p>
<p><strong>Listagem 11. A página index.jsp.</strong></p>
<pre class="brush:xhtml">&lt;%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%&gt;

&lt;%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %&gt;

&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

&lt;%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&gt;

&lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;

&lt;link href="&lt;c:url value="/static/styles/style.css"/&gt;" rel="stylesheet" /&gt;

&lt;title&gt;Principal&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;div id="wrap"&gt;

&lt;div&gt;

&lt;%@ include file="/menu.jsp" %&gt;

&lt;/div&gt;

&lt;div&gt;

&lt;div&gt;

Aplicação CRUD criada utilizando o Spring MVC 3.0 com suporte a REST.

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;</pre>
<p>Assim como <strong>index.jsp</strong>, crie o <strong>menu.jsp</strong> em <strong>webapps</strong>.</p>
<p><strong>Listagem 12. A página menu.jsp.</strong></p>
<pre class="brush:html">&lt;ul&gt;

&lt;li&gt;

&lt;h2&gt;Contato&lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt;&lt;a href="&lt;c:url value="/contato"/&gt;"&gt;Ver todos&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="&lt;c:url value="/contato/form"/&gt;"&gt;Novo Contato&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;</pre>
<div id="attachment_493" class="wp-caption alignnone" style="width: 119px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-32.jpg" rel="lightbox[461]"><img class="size-medium wp-image-493" title="figura-32" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/08/figura-32-109x300.jpg" alt="Figura 32 – Visão geral de todos os arquivos utilizados na geração do projeto" width="109" height="300" /></a><p class="wp-caption-text">Figura 32 – Visão geral de todos os arquivos utilizados na geração do projeto</p></div>
<h3>O projeto para download</h3>
<p><a href="http://www.edsongoncalves.com.br/downloads/ProjSpringMVCComJpa.zip">Clique aqui </a>para baixar o projeto completo como feito até o momento.</p>
<h3><strong>Considerações finais</strong></h3>
<p>Agora que aprendemos a fazer um CRUD com o Spring MVC, podemos criar projetos mais complexos. Caso estejam com pressa em aprender algo mais complexo, a revista <a href="http://www.devmedia.com.br/post-16564-Revista-Java-Magazine-78.html" target="_blank">JavaMagazine #78</a> publicou, alguns meses atrás, um artigo meu com o Spring MVC 3 na criação de um blog, passo a passo.</p>
<h3>No próximo artigo</h3>
<p>Faremos alterações neste projeto, criando as verificações utilizando Bean Validation e depois trabalhando com testes.</p>
<p>Até o próximo artigo pessoALL.</p>
<hr size="1" /><a href="#_ftnref">[1]</a><a name="_ftn1"></a> Imagens e folhas de estilo foram omitidos neste artigo, mas podem ser obtidos no projeto completo encontrado no final para download</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/08/16/spring-mvc-3-na-pratica-com-jpa-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Hibernate com Hibernate Tools</title>
		<link>http://www.edsongoncalves.com.br/2010/06/27/hibernate-com-hibernate-tools/</link>
		<comments>http://www.edsongoncalves.com.br/2010/06/27/hibernate-com-hibernate-tools/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 04:30:05 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JPA 2.0]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=395</guid>
		<description><![CDATA[Olá Pessoal, tudo bom? Como vão vocês? O artigo que veremos fala sobre a utilização do Hibernate Tools, um excelente plugin para o Eclipse IDE, oficial da Red Hat, feito para trabalhar com o Hibernate. Dúvidas e críticas são sempre bem vindas. Obtendo e instalando o Eclipse IDE Para desenvolver este exemplo, utilizei a versão [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal, tudo bom? Como vão vocês?</p>
<p>O artigo que veremos fala sobre a utilização do Hibernate Tools, um excelente plugin para o Eclipse IDE, oficial da Red Hat, feito para trabalhar com o Hibernate.</p>
<p>Dúvidas e críticas são sempre bem vindas.</p>
<h3>Obtendo e instalando o Eclipse IDE</h3>
<p>Para desenvolver este exemplo, utilizei a versão do Eclipse IDE 3.6, em um ambiente voltado para o trabalho com Java EE. Para obter o Eclipse IDE, já configurado com o ambiente Web, vá ao endereço <a href="http://www.eclipse.org/downloads/"><strong>http://www.eclipse.org/downloads/</strong></a> e clique em <strong>Eclipse IDE for Java EE Developers</strong>. Lembre-se de selecionar o seu sistema operacional.</p>
<p>Ao baixar, descompacte em um local desejado de sua máquina.</p>
<h3>O plugin JBoss Tools</h3>
<p>Para a versão do Eclipse 3.6, o atual enquanto escrevo este artigo, temos uma versão em desenvolvimento compatível do plugin JBoss Tools. Para obtê-lo, basta baixar a versão de desenvolvimento atual, encontrada em um dos diretórios existentes dentro deste endereço:</p>
<p><a href="http://download.jboss.org/jbosstools/builds/nightly/trunk/"><strong>http://download.jboss.org/jbosstools/builds/nightly/trunk/</strong></a><strong> </strong></p>
<p>Podemos baixar o Hibernate Tools separadamente ou, como fiz, baixando o JBoss Tools completo. O arquivo que obtive, no momento em que escrevo é o <a href="http://download.jboss.org/jbosstools/builds/nightly/trunk/201006240331/all/JBossTools-Update-3.2.0.v201006240331N-H369-M1.zip"><strong>JBossTools-Update-3.2.0.v201006240331N-H369-M1.zip</strong></a>. Com o Eclipse IDE fechado, ao baixar o plugin, descompacte e mova seu conteúdo  sobre o diretório eclipse. Isto fará a instalação do  plugin JBoss Tools. Depois de adicionarmos o plugin, inicie o Eclipse.</p>
<table border="1">
<tbody>
<tr>
<td><strong>Atenção: </strong>Por se tratar de uma versão em desenvolvimento, o  endereço passado neste artigo poderá sofrer alterações. Portanto, sempre  verifique a última versão no endereço <a href="http://download.jboss.org/jbosstools/builds/">http://download.jboss.org/jbosstools/builds/</a>.  As versões de desenvolvimento costumam causar instabilidade no Eclipse,  portanto, façam seu uso em um ambiente de testes.</td>
</tr>
</tbody>
</table>
<h3>O banco de dados</h3>
<p>Utilizaremos o banco de dados MySQL, que pode ser adquirido <a href="http://dev.mysql.com/downloads/mysql/"><strong>clicando aqui</strong></a>. O banco de dados que utilizaremos para executar o exemplo se chamará <strong>hibernatenapratica</strong>.</p>
<h3>Criando o projeto</h3>
<p>Iniciem alterando a perspectiva. No ícone <strong>Open Perspective<a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/icone-open-perspective1.jpg" rel="lightbox[395]"><img class="size-full wp-image-397 alignnone" title="icone-open-perspective" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/icone-open-perspective1.jpg" alt="" width="155" height="39" /></a></strong>,  cliquem em <strong>Other</strong>.</p>
<div id="attachment_398" class="wp-caption alignnone" style="width: 134px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-15.jpg" rel="lightbox[395]"><img class="size-full wp-image-398 " title="Figura 1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-15.jpg" alt="Figure 1 – Alterando a Perspectiva" width="124" height="144" /></a><p class="wp-caption-text">Figura 1 – Alterando a Perspectiva</p></div>
<p>Selecionem em seguida a Perspectiva <strong>Hibernate</strong>.</p>
<div id="attachment_399" class="wp-caption alignnone" style="width: 257px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-21.jpg" rel="lightbox[395]"><img class="size-medium wp-image-399 " title="Figura 2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-21-247x300.jpg" alt="Figure 2 – Seleção da perspectiva Hibernate" width="247" height="300" /></a><p class="wp-caption-text">Figura 2 – Seleção da perspectiva Hibernate</p></div>
<p>Na view <strong>Package Explorer</strong>, cliquem com o direito do mouse e selecionem, no menu de contexto, o item <strong>Project</strong>.</p>
<div id="attachment_400" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-31.jpg" rel="lightbox[395]"><img class="size-medium wp-image-400" title="Figura 3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-31-300x117.jpg" alt="Figure 3 – Criando um novo projeto pela view Package Explorer através do menu de contexto" width="300" height="117" /></a><p class="wp-caption-text">Figura 3 – Criando um novo projeto pela view Package Explorer através do menu de contexto</p></div>
<p>Na caixa de dialogo <strong>New Project</strong>, selecionem <strong>Java&gt;Java Project</strong> e cliquem no botão <strong>Next</strong>.</p>
<div id="attachment_401" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-41.jpg" rel="lightbox[395]"><img class="size-medium wp-image-401" title="Figura 4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-41-300x285.jpg" alt="Figure 4 – Seleção da opção Java Project" width="300" height="285" /></a><p class="wp-caption-text">Figura 4 – Seleção da opção Java Project</p></div>
<p>Em <strong>New Java Project</strong>, digitem o nome do seu projeto. Irei utilizar o nome <strong>ProjUtilizandoHibernateTools</strong>. Em seguida, cliquem no botão <strong>Finish</strong>.</p>
<div id="attachment_402" class="wp-caption alignnone" style="width: 267px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-51.jpg" rel="lightbox[395]"><img class="size-medium wp-image-402" title="Figura 5" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-51-257x300.jpg" alt="Figure 5 – Criação de um projeto Java" width="257" height="300" /></a><p class="wp-caption-text">Figura 5 – Criação de um projeto Java</p></div>
<p>Ao surgir a caixa de dialogo <strong>Open Associated Perspective</strong>, cliquem no botão <strong>No</strong>. Nós não precisaremos da perspectiva Java apenas para editar o projeto, uma vez que nossa intenção é trabalhar única e exclusivamente com o Hibernate.</p>
<div id="attachment_403" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-61.jpg" rel="lightbox[395]"><img class="size-medium wp-image-403" title="Figura 6" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-61-300x121.jpg" alt="Figure 6 – Pergunta automática de alteração de perspectiva feita dependendo do tipo de projeto criado" width="300" height="121" /></a><p class="wp-caption-text">Figura 6 – Pergunta automática de alteração de perspectiva feita dependendo do tipo de projeto criado</p></div>
<h3>As bibliotecas</h3>
<p>Para trabalhar com o Hibernate 3.5, primeiramente será preciso configurar os arquivos no projeto. Para adicionar as bibliotecas que necessitamos ao projeto, cliquem com o direito do mouse sobre o mesmo, na view <strong>Package Explorer</strong> e, no menu de contexto, selecionem <strong>Properties</strong>.</p>
<div id="attachment_404" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-71.jpg" rel="lightbox[395]"><img class="size-medium wp-image-404" title="Figura 7" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-71-300x214.jpg" alt="Figure 7 – Bibliotecas do projeto" width="300" height="214" /></a><p class="wp-caption-text">Figura 7 – Bibliotecas do projeto</p></div>
<p>Vocês podem baixar as bibliotecas do Hibernate <a href="https://www.hibernate.org/">clicando aqui</a>. No site, em <strong>Download</strong>, no menu lateral esquerdo, encontramos as bibliotecas para serem baixadas. A versão, no momento em que escrevo, é a 3.5.1.</p>
<p>Os arquivos que utilizaremos no projeto serão os encontrados em:</p>
<ul>
<li><strong>Hibernate Core </strong></li>
</ul>
<p>Ao baixar os arquivos, descompacte-os.  Vocês precisarão das seguintes bibliotecas:</p>
<ul>
<li><strong>hibernate3.jar</strong></li>
<li><strong>antlr-2.7.6.jar</strong></li>
<li><strong>commons-collections-3.1.jar</strong></li>
<li><strong>dom4j-1.6.1.jar</strong></li>
<li><strong>javassist-3.9.0.GA.jar</strong></li>
<li><strong>jta-1.1.jar</strong></li>
<li><strong>slf4j-api-1.5.8.jar</strong></li>
<li><strong>hibernate-jpa-2.0-api-1.0.0-CR-1.jar</strong></li>
</ul>
<p>Além destes arquivos, será necessário utilizar as bibliotecas da <a href="http://www.slf4j.org/">Simple Logging Facade for Java</a>, SLF4J. Baixem os arquivos com todas as bibliotecas da SLF4J <a href="http://www.slf4j.org/download.html">aqui</a>.</p>
<p>Ao descompactar o arquivo, vocês encontrarão a seguinte biblioteca:</p>
<ul>
<li><strong>slf4j-jdk14-1.5.11.jar</strong></li>
</ul>
<p>Por fim, também necessitaremos da biblioteca JDBC do MySQL, que pode ser obtida <a href="http://mysql.com/downloads/">clicando aqui</a>. A versão 5.1.10 era, no momento em que este artigo começa a ser escrito, a versão mais atual. Entretanto, é possível que, com o tempo, isto esteja alterado.</p>
<p>Para o projeto, precisaremos do seguinte JAR:</p>
<ul>
<li><strong>mysql-connector-java-5.1.10-bin.jar</strong></li>
</ul>
<h3>Criando o JavaBean Categoria</h3>
<p>Com o direito do mouse em seu projeto, vamos até o item <strong>New&gt;Other</strong>. Na caixa de diálogo <strong>New</strong>, selecionem<strong> Java&gt;Class</strong>. Na caixa de diálogo <strong>New Java Class</strong>, preencham o pacote (<strong>br.com.integrator</strong>) e o nome da classe, no caso <strong>Categoria</strong>, em <strong>Name</strong>. Confirmem a criação no botão <strong>Finish</strong>.</p>
<div id="attachment_405" class="wp-caption alignnone" style="width: 257px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-81.jpg" rel="lightbox[395]"><img class="size-medium wp-image-405" title="Figura 8" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-81-247x300.jpg" alt="Figure 8 – Criando a classe Categoria" width="247" height="300" /></a><p class="wp-caption-text">Figura 8 – Criando a classe Categoria</p></div>
<p>Alterem a classe <strong>Categoria</strong> conforme mostrado na <strong>Listagem 1</strong>.</p>
<p><strong>Listagem 1 – O JavaBean Categoria</strong></p>
<pre class="brush:java">package br.com.integrator;

import java.io.Serializable;

import java.lang.Long;

import java.lang.String;

public class Categoria implements Serializable {

private Long id;

private String categoria;

private String descricao;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getCategoria() {

return categoria;

}

public void setCategoria(String categoria) {

this.categoria = categoria;

}

public String getDescricao() {

return descricao;

}

public void setDescricao(String descricao) {

this.descricao = descricao;

}

}</pre>
<h3>Mapeando a tabela no Hibernate utilizando a forma tradicional</h3>
<p>Para mapear a tabela correspondente no banco de dados a classe Categoria, através do Hibernate, temos que criar um XML como forma tradicional de utilização do framework.</p>
<p>Selecionem o pacote e a classe na view <strong>Package Explorer</strong> e, com o direito do mouse, selecionem o item <strong>New&gt;Hibernate XML Mapping file (hbm.xml)</strong>.</p>
<div id="attachment_406" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-91.jpg" rel="lightbox[395]"><img class="size-medium wp-image-406" title="Figura 9" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-91-300x111.jpg" alt="Figure 9 – Seleção do item Hibernate XML Mapping file (hbm.xml) no menu de contexto" width="300" height="111" /></a><p class="wp-caption-text">Figura 9 – Seleção do item Hibernate XML Mapping file (hbm.xml) no menu de contexto</p></div>
<p>Na caixa de diálogo <strong>New Hibernate XML Mapping Files (hbm.xml)</strong>, teremos os dois itens selecionados: o pacote e a classe. Caso tenhamos esquecido de selecionar um ou ambos, podemos clicar nos botões que estão na lateral direita (<strong>Add Class</strong> e <strong>Add Package</strong>). Continuem no botão <strong>Next</strong>.</p>
<div id="attachment_407" class="wp-caption alignnone" style="width: 278px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-101.jpg" rel="lightbox[395]"><img class="size-medium wp-image-407" title="Figura 10" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-101-268x300.jpg" alt="Figure 10 – Criação do arquivo XML de mapeamento do Hibernate" width="268" height="300" /></a><p class="wp-caption-text">Figura 10 – Criação do arquivo XML de mapeamento do Hibernate</p></div>
<p>Na etapa seguinte o assistente exibirá o arquivo <strong>Categoria.hbm.xml</strong> que será criado.  Continuem no botão <strong>Next</strong>.</p>
<div id="attachment_408" class="wp-caption alignnone" style="width: 278px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-111.jpg" rel="lightbox[395]"><img class="size-medium wp-image-408" title="Figura 11" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-111-268x300.jpg" alt="Figure 11 – Apresentação do arquivo XML de mapeamento do Hibernate que será criado" width="268" height="300" /></a><p class="wp-caption-text">Figura 11 – Apresentação do arquivo XML de mapeamento do Hibernate que será criado</p></div>
<p>A última etapa apresentará o XML do mapeamento criado para o Hibernate, onde a base foi a classe Categoria. Confirmem a criação no botão <strong>Finish</strong>.</p>
<div id="attachment_409" class="wp-caption alignnone" style="width: 274px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-121.jpg" rel="lightbox[395]"><img class="size-medium wp-image-409" title="Figura 12" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-121-264x300.jpg" alt="Figure 12 – Arquivo XML do mapeamento que será criado" width="264" height="300" /></a><p class="wp-caption-text">Figura 12 – Arquivo XML do mapeamento que será criado</p></div>
<p>Com a finalização do assistente, temos o XML gerado aberto pelo editor do Hibernate Tools. Neste editor podemos mudar as características que desejamos no XML gerado, colocando mais informações em cada propriedade.</p>
<div id="attachment_410" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-132.jpg" rel="lightbox[395]"><img class="size-medium wp-image-410" title="Figura 13" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-132-300x231.jpg" alt="Figure 13 – Editor do XML gerado para Hibernate" width="300" height="231" /></a><p class="wp-caption-text">Figura 13 – Editor do XML gerado para Hibernate</p></div>
<p>O resultado final será como o mostrado na <strong>Listagem 2</strong> a seguir:</p>
<p><strong>Listagem 2 – O arquivo Categoria.hbm.xml</strong></p>
<p>O resultado final será como o mostrado na <strong>Listagem 2</strong> a seguir:</p>
<p><strong>Listagem 2 – O arquivo Categoria.hbm.xml</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0"?&gt;

&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;

&lt;!-- Generated 24/06/2010 05:07:14 by Hibernate Tools 3.3.0.GA --&gt;

&lt;hibernate-mapping&gt;

&lt;class name="br.com.integrator.Categoria" table="categoria"&gt;

&lt;id name="id" type="java.lang.Long"&gt;

&lt;column name="id"/&gt;

&lt;generator class="increment"/&gt;

&lt;/id&gt;

&lt;property generated="never" lazy="false" name="categoria" type="java.lang.String"&gt;

&lt;column name="categoria" length="50"/&gt;

&lt;/property&gt;

&lt;property generated="never" lazy="false" name="descricao" type="java.lang.String"&gt;

&lt;column name="descricao"/&gt;

&lt;/property&gt;

&lt;/class&gt;

&lt;/hibernate-mapping&gt;</pre>
<h3>Configurando o Hibernate</h3>
<p>Com o direito do mouse sobre <strong>src</strong>, na view <strong>Package Explorer</strong>, selecionem <strong>Hibernate Configuration File (cfg.xml)</strong>.</p>
<div id="attachment_411" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-141.jpg" rel="lightbox[395]"><img class="size-medium wp-image-411" title="Figura 14" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-141-300x125.jpg" alt="Figure 14 – Criação do arquivo hibernate.cfg.xml" width="300" height="125" /></a><p class="wp-caption-text">Figura 14 – Criação do arquivo hibernate.cfg.xml</p></div>
<p>Ao surgir o assistente, deixem o nome do arquivo como <strong>hibernate.cfg.xml</strong> e prossigam no botão <strong>Next</strong>.</p>
<div id="attachment_412" class="wp-caption alignnone" style="width: 254px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-151.jpg" rel="lightbox[395]"><img class="size-medium wp-image-412" title="Figura 15" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-151-244x300.jpg" alt="Figure 15 – Assistente de criação do arquivo de configuração do Hibernate" width="244" height="300" /></a><p class="wp-caption-text">Figura 15 – Assistente de criação do arquivo de configuração do Hibernate</p></div>
<p>Como vamos utilizar o banco de dados MySQL, preencham os campos como mostrado na <strong>Figura 16</strong>, alterando de acordo com as configurações que possuem em seu banco de dados.</p>
<p>Por fim, marquem a opção <strong>Create a console configuration</strong>.  Cliquem no botão <strong>Next</strong>.</p>
<div id="attachment_413" class="wp-caption alignnone" style="width: 254px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-16.jpg" rel="lightbox[395]"><img class="size-medium wp-image-413" title="Figura 16" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-16-244x300.jpg" alt="Figure 16 – Configuração do banco de dados no hibernate.cfg.xml " width="244" height="300" /></a><p class="wp-caption-text">Figura 16 – Configuração do banco de dados no hibernate.cfg.xml </p></div>
<p>Na última etapa, temos as configurações do console do Hibernate. Este console, quando configurado e funcional, nos permite  executar queries HQL ou trabalhar com Criteria.</p>
<div id="attachment_414" class="wp-caption alignnone" style="width: 254px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-17.jpg" rel="lightbox[395]"><img class="size-medium wp-image-414" title="Figura 17" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-17-244x300.jpg" alt="Figure 17 – Configuração do console Hibernate" width="244" height="300" /></a><p class="wp-caption-text">Figura 17 – Configuração do console Hibernate</p></div>
<p>Cliquem na aba <strong>Mappings</strong> e removam o caminho configurado automaticamente para o arquivo <strong>Categoria.hbm.xml</strong>. Este caminho não será preciso porque iremos configurá-lo diretamente no arquivo <strong>hibernate.cfg.xml</strong>, ao qual o console fará uso também. Confirmem o assistente clicando no botão <strong>Finish</strong>.</p>
<div id="attachment_415" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-17-Complemento.jpg" rel="lightbox[395]"><img class="size-medium wp-image-415" title="Figura 17-Complemento" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-17-Complemento-300x216.jpg" alt="Figure 18 – A abra Mappings da configuração do console" width="300" height="216" /></a><p class="wp-caption-text">Figura 18 – A abra Mappings da configuração do console</p></div>
<p>Na finalização do assistente, abrirá o editor do arquivo de configuração do Hibernate.</p>
<div id="attachment_416" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-18.jpg" rel="lightbox[395]"><img class="size-medium wp-image-416" title="Figura 18" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-18-300x172.jpg" alt="Figure 19 – O editor do arquivo de configuração do Hibernate" width="300" height="172" /></a><p class="wp-caption-text">Figura 19 – O editor do arquivo de configuração do Hibernate</p></div>
<p>Como muitas das informações que desejávamos, foram colocadas no assistente, resta apenas adicionar o caminho para <strong>Categoria.hbm.xml</strong>. Para fazermos isso, basta ir no botão <strong>Add</strong> e digitar o caminho em <strong>Resource</strong>.</p>
<div id="attachment_418" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-20.jpg" rel="lightbox[395]"><img class="size-medium wp-image-418" title="Figura 20" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-20-300x125.jpg" alt="Figura 20 – Detalhe de Mappings com o arquivo Categoria.hbm.xml adicionado" width="300" height="125" /></a><p class="wp-caption-text">Figura 20 – Detalhe de Mappings com o arquivo Categoria.hbm.xml adicionado</p></div>
<p>Para executarmos o exemplo, tornando possível a criação da tabela no banco de dados pelo Hibernate, assim como sua recriação a cada nova execução, expandindo <strong>Session Factory&gt;Properties&gt;Hibernate</strong>, em <strong>Hibernate Configuration 3.0 XML Editor</strong>, alterem <strong>Hbm2ddl Auto</strong> para <strong>create-drop</strong>.</p>
<p>Neste mesmo local, onde temos as propriedades, podemos alterar para <strong>true</strong> em <strong>Show SQL</strong>, <strong>Use SQL Comments</strong> e <strong>Format SQL</strong>.</p>
<div id="attachment_419" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-211.jpg" rel="lightbox[395]"><img class="size-medium wp-image-419" title="Figura 21" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-211-300x242.jpg" alt="Figura 21 – Adicionando novas propriedades ao arquivo hibernate.cfg.xml" width="300" height="242" /></a><p class="wp-caption-text">Figura 21 – Adicionando novas propriedades ao arquivo hibernate.cfg.xml</p></div>
<p>O resultado final das configurações, no arquivo <strong>hibernate.cfg.xml</strong>, são mostrados na <strong>Listagem 3</strong> a seguir:</p>
<p><strong>Listagem 3 – O arquivo hibernate.cfg.xml</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;

&lt;hibernate-configuration&gt;

&lt;session-factory&gt;

&lt;property name="hibernate.connection.driver_class"&gt;org.gjt.mm.mysql.Driver&lt;/property&gt;

&lt;property name="hibernate.connection.password"&gt;integrator&lt;/property&gt;

&lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost/hibernatenapratica&lt;/property&gt;

&lt;property name="hibernate.connection.username"&gt;edson&lt;/property&gt;

&lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQL5InnoDBDialect&lt;/property&gt;

&lt;property name="hibernate.show_sql"&gt;true&lt;/property&gt;

&lt;property name="hibernate.use_sql_comments"&gt;true&lt;/property&gt;

&lt;property name="hibernate.format_sql"&gt;true&lt;/property&gt;

&lt;property name="hibernate.hbm2ddl.auto"&gt;create-drop&lt;/property&gt;

&lt;mapping resource="br/com/integrator/Categoria.hbm.xml"/&gt;

&lt;/session-factory&gt;

&lt;/hibernate-configuration&gt;</pre>
<h3>Algumas características do Hibernate Tools</h3>
<p>Como Hibernate está devidamente configurado, podemos já utilizar algumas de suas características.</p>
<div id="attachment_420" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-22.jpg" rel="lightbox[395]"><img class="size-medium wp-image-420" title="Figura 22" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-22-300x213.jpg" alt="Figura 22 – A view Hibernate Configurations após as configurações do arquivo hibernate.cfg.xml " width="300" height="213" /></a><p class="wp-caption-text">Figura 22 – A view Hibernate Configurations após as configurações do arquivo hibernate.cfg.xml </p></div>
<p>Na view <strong>Hibernate Configurations</strong>, cliquem com o direito do mouse e selecionem <strong>Mapping Diagram</strong>.</p>
<div id="attachment_421" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-23.jpg" rel="lightbox[395]"><img class="size-medium wp-image-421" title="Figura 23" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-23-300x213.jpg" alt="Figura 23 – Acessando Mapping Diagram no menu de contexto" width="300" height="213" /></a><p class="wp-caption-text">Figura 23 – Acessando Mapping Diagram no menu de contexto</p></div>
<p>O Hibernate Tools possui uma ferramenta visual que nos permite visualizar as classes mapeadas em suas tabelas correspondentes encontradas no banco de dados.  Isto não significa que a tabela já exista no banco de dados. Trata-se da forma como a configuração “enxerga” a tabela em que irá trabalhar no banco de dados.</p>
<div id="attachment_422" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-24.jpg" rel="lightbox[395]"><img class="size-medium wp-image-422" title="Figura 24" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-24-300x97.jpg" alt="Figura 24 – Visualizando a classe Categoria mapeada para a tabela correspondente no banco de dados" width="300" height="97" /></a><p class="wp-caption-text">Figura 24 – Visualizando a classe Categoria mapeada para a tabela correspondente no banco de dados</p></div>
<h3>Colocando o Hibernate para trabalhar</h3>
<p>Iremos criar duas pequenas classes que juntas irão gerar a tabela e seus  dados dela no banco de dados.</p>
<p>Com o direito do mouse sobre <strong>src</strong>, na view <strong>Package Explorer</strong>, selecionem o item <strong>New&gt;Other</strong>.  Na caixa de dialogo <strong>New</strong>, selecionem <strong>Java&gt;Class</strong>.</p>
<p>Coloquem o pacote <strong>br.com.integrator.util</strong> e deem o nome da classe de <strong>HIbernateUtil</strong>, confirmando o assistente, em seguida, no botão <strong>Finish</strong>.</p>
<div id="attachment_423" class="wp-caption alignnone" style="width: 257px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-25.jpg" rel="lightbox[395]"><img class="size-medium wp-image-423" title="Figura 25" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-25-247x300.jpg" alt="Figura 25 – Criação da classe HibernateUtil" width="247" height="300" /></a><p class="wp-caption-text">Figura 25 – Criação da classe HibernateUtil</p></div>
<p>O conteúdo da classe <strong>HibernateUtil </strong>será similar ao mostrado na <strong>Listagem 4</strong> a seguir:</p>
<p><strong>Listagem 4 – A classe HibernateUtil</strong></p>
<pre class="brush:java">package br.com.integrator.util;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

public class HibernateUtil {

private  static final SessionFactory sessionFactory;

static {

try {

sessionFactory = new Configuration().configure()

.buildSessionFactory();

} catch (Throwable ex) {

System.err.println("Initial SessionFactory creation failed." + ex);

throw new ExceptionInInitializerError(ex);

}

}

public static SessionFactory getSessionFactory() {

return sessionFactory;

}

}</pre>
<p>A segunda classe que criaremos irá se chamar <strong>Main</strong> e será colocada no pacote <strong>br.com.integrator</strong>.</p>
<div id="attachment_424" class="wp-caption alignnone" style="width: 257px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-26.jpg" rel="lightbox[395]"><img class="size-medium wp-image-424" title="Figura 26" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-26-247x300.jpg" alt="Figura 26 – Criação da classe Main" width="247" height="300" /></a><p class="wp-caption-text">Figura 26 – Criação da classe Main</p></div>
<p>O conteúdo da classe <strong>Main</strong> é mostrado na <strong>Listagem 5</strong> a seguir:</p>
<p><strong>Listagem 5 – A classe Main</strong></p>
<pre class="brush:java">package br.com.integrator;

import org.hibernate.HibernateException;

import org.hibernate.Session;

import org.hibernate.Transaction;

import br.com.integrator.util.HibernateUtil;

public class Main {

public static void main(String[] args) {

Session session = HibernateUtil.getSessionFactory().openSession();

Transaction transaction = null;

try {

transaction = session.beginTransaction();

Categoria categoria1 = new Categoria();

categoria1.setCategoria("Informática");

categoria1.setDescricao("Produtos de Informática");

session.save(categoria1);

Categoria categoria2 = new Categoria();

categoria2.setCategoria("Eletrodomésticos");

categoria2.setDescricao("Eletrodomésticos em Geral");

session.save(categoria2);

Categoria categoria3 = new Categoria();

categoria3.setCategoria("Livraria");

categoria3.setDescricao("Livros para todos os gostos");

session.save(categoria3);

transaction.commit();

} catch (HibernateException e) {

transaction.rollback();

e.printStackTrace();

} finally {

session.close();

}

}

}</pre>
<p>Executem a classe <strong>Main</strong> para que o <strong>Hibernate</strong> crie a tabela <strong>categoria</strong> e adicionem o conteúdo. Graças as configurações criadas no arquivo <strong>hibernate.cfg.xml</strong>, temos a saída na view <strong>Console</strong> como mostra a <strong>Figura 27</strong>.</p>
<div id="attachment_425" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-27.jpg" rel="lightbox[395]"><img class="size-medium wp-image-425" title="Figura 27" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-27-300x264.jpg" alt="Figura 27 – A saída no console criada na execução do exemplo" width="300" height="264" /></a><p class="wp-caption-text">Figura 27 – A saída no console criada na execução do exemplo</p></div>
<h3>O Editor HQL e Criteria</h3>
<p>Para acessar o editor <strong>HQL</strong> do Hibernate Tools, cliquem com o direito do mouse em qualquer parte da view <strong>Hibernate Configurations</strong> e selecionem, no menu de contexto, o item <strong>HQL Editor</strong>.</p>
<div id="attachment_426" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-28.jpg" rel="lightbox[395]"><img class="size-medium wp-image-426" title="Figura 28" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-28-300x180.jpg" alt="Figura 28 – Chamando o editor HQL pelo menu de contexto na view Hibernate Configurations" width="300" height="180" /></a><p class="wp-caption-text">Figura 28 – Chamando o editor HQL pelo menu de contexto na view Hibernate Configurations</p></div>
<p>No editor HQL, se digitarmos uma query HQL, veremos também na view <strong>Hibernate Dynamic SQL Preview</strong> a instrução SQL gerada automaticamente pelo Hibernate.</p>
<div id="attachment_427" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-29.jpg" rel="lightbox[395]"><img class="size-medium wp-image-427" title="Figura 29" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-29-300x162.jpg" alt="Figura 29 – Editor HQL em ação e a view Hibernate Dynamic SQL Preview exibindo a SQL gerada" width="300" height="162" /></a><p class="wp-caption-text">Figura 29 – Editor HQL em ação e a view Hibernate Dynamic SQL Preview exibindo a SQL gerada</p></div>
<p>Ao mandarmos executar a query HQL, em <strong>Run HQL</strong>, vemos o resultado surgir na view <strong>Hibernate Query Result</strong>. Quando selecionamos este resultado, vemos os dados na view  <strong>Properties</strong>.</p>
<div id="attachment_428" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-30.jpg" rel="lightbox[395]"><img class="size-medium wp-image-428" title="Figura 30" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-30-300x104.jpg" alt="Figura 30 – Resultados encontrados na query HQL executada nas views Hibernate Query Result e Properties" width="300" height="104" /></a><p class="wp-caption-text">Figura 30 – Resultados encontrados na query HQL executada nas views Hibernate Query Result e Properties</p></div>
<p>A parte de Criteria também é bem fácil de se criar. Cliquem com o direito do mouse sobre <strong>Session Factory&gt;br.com.integrator.Categoria</strong> e selecionem, no menu de contexto, o item <strong>Hibernate Criteria Editor</strong>.</p>
<div id="attachment_429" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-311.jpg" rel="lightbox[395]"><img class="size-medium wp-image-429" title="Figura 31" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-311-300x144.jpg" alt="Figura 31 – Abrindo o editor de criteria" width="300" height="144" /></a><p class="wp-caption-text">Figura 31 – Abrindo o editor de criteria</p></div>
<p>Ao surgir o editor de Criteria, basta completarmos a instrução que desejamos executar. Em seguida,  clicamos no botão <strong>Run criteria</strong> (o mesmo botão que no editor HQL se chama <strong>Run HQL</strong>).</p>
<div id="attachment_430" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-32.jpg" rel="lightbox[395]"><img class="size-medium wp-image-430" title="Figura 32" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-32-300x108.jpg" alt="Figura 32 – Criação do Hibernate Criteria no editor e seu resultado apos clicar em Run criteria" width="300" height="108" /></a><p class="wp-caption-text">Figura 32 – Criação do Hibernate Criteria no editor e seu resultado apos clicar em Run criteria</p></div>
<h3>Engenharia Reversa</h3>
<p>A engenharia reversa no Hibernate Tools também é de fácil utilização.</p>
<p>Para trabalhar com a engenharia reversa, é necessário termos o arquivo de configuração do Hibernate, configurado para conectar-se ao banco de dados pré-existente.</p>
<p>A engenharia reversa está preparada para gerar as classes, os arquivos .hbm.xml ou então anotações. Também é possível termos anotações JPA, relacionamentos e outros.</p>
<p>Para criar a engenharia reversa em nosso exemplo, cliquem com o direito do mouse na view <strong>Package Explorer</strong>. No menu de contexto selecionem <strong>New&gt;Hibernate Reverse Engineering File (reveng.xml)</strong>.</p>
<div id="attachment_431" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-33.jpg" rel="lightbox[395]"><img class="size-medium wp-image-431" title="Figura 33" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-33-300x128.jpg" alt="Figura 33 – Opção Hibernate Reverse Engineering File (reveng.xml) do menu de contexto" width="300" height="128" /></a><p class="wp-caption-text">Figura 33 – Opção Hibernate Reverse Engineering File (reveng.xml) do menu de contexto</p></div>
<p>Na caixa de diálogo, selecionem o diretório <strong>src</strong> e mantenham o nome do arquivo padrão solicitado. Cliquem no botão <strong>Next</strong>.</p>
<div id="attachment_432" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-34.jpg" rel="lightbox[395]"><img class="size-medium wp-image-432" title="Figura 34" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-34-300x264.jpg" alt="Figura 34 – Iniciando a criação do arquivo de configuração de engenharia reversa" width="300" height="264" /></a><p class="wp-caption-text">Figura 34 – Iniciando a criação do arquivo de configuração de engenharia reversa</p></div>
<p>Na etapa seguinte, selecionem a configuração do console previamente criada em <strong>Console configuration</strong>. Cliquem no botão <strong>Refresh</strong> e selecionem no banco de dados a(s) tabela(s) que desejam trabalhar na engenharia reversa para utilizar com o Hibernate e confirmem no botão <strong>Include</strong>. Concluam o assistente no botão <strong>Finish</strong>.</p>
<div id="attachment_433" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-35.jpg" rel="lightbox[395]"><img class="size-medium wp-image-433" title="Figura 35" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-35-300x225.jpg" alt="Figura 35 – Seleção da tabela categoria para a engenharia reversa" width="300" height="225" /></a><p class="wp-caption-text">Figura 35 – Seleção da tabela categoria para a engenharia reversa</p></div>
<p>O assistente irá gerar o arquivo de engenharia reversa. Agora iremos configurá-lo para que, na geração dos arquivos baseados na(s) tabela(s) do banco de dados, a conversão seja exatamente como desejamos.</p>
<p>Comecem indo na aba <strong>Type Mappings</strong> e cliquem no botão <strong>Refresh</strong>.</p>
<div id="attachment_434" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-36.jpg" rel="lightbox[395]"><img class="size-medium wp-image-434" title="Figura 36" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-36-300x141.jpg" alt="Figura 36 – Exibindo o banco de dados através do botão Refresh" width="300" height="141" /></a><p class="wp-caption-text">Figura 36 – Exibindo o banco de dados através do botão Refresh</p></div>
<p>Na caixa de diálogo <strong>Select a console configuration</strong>, selecionem o console criado e confirmem no  botão <strong>OK</strong>.</p>
<div id="attachment_435" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-37.jpg" rel="lightbox[395]"><img class="size-medium wp-image-435" title="Figura 37" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-37-300x139.jpg" alt="Figura 37 – Seleção da configuração de console" width="300" height="139" /></a><p class="wp-caption-text">Figura 37 – Seleção da configuração de console</p></div>
<p>Retornando para o editor, temos o banco de dados, tabela(s) e campo(s). Para que ocorra a engenharia reversa de forma correta, devemos <strong>Add</strong> cada um deles, editando o <strong>Hibernate Type</strong>, <strong>Length</strong> e também <strong>Not-Null</strong>.</p>
<p>Vejam  como é  mostrado na <strong>Figura 38</strong>.</p>
<div id="attachment_436" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-38.jpg" rel="lightbox[395]"><img class="size-medium wp-image-436" title="Figura 38" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-38-300x99.jpg" alt="Figura 38 – Configurando os tipos JDBC e  Hibernate da tabela para executar a engenharia reversa " width="300" height="99" /></a><p class="wp-caption-text">Figura 38 – Configurando os tipos JDBC e  Hibernate da tabela para executar a engenharia reversa </p></div>
<p>O resultado do arquivo configurado, visto na aba <strong>Source</strong>, em formato XML, é como o mostrado na <strong>Listagem 6</strong>.</p>
<p><strong>Listagem 6 – O arquivo hibernate.revenge.xml</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" &gt;

&lt;hibernate-reverse-engineering&gt;

&lt;type-mapping&gt;

&lt;sql-type jdbc-type="BIGINT" hibernate-type="long"

not-null="true"&gt;

&lt;/sql-type&gt;

&lt;sql-type jdbc-type="VARCHAR" hibernate-type="string" length="50"

not-null="false"&gt;

&lt;/sql-type&gt;

&lt;sql-type jdbc-type="VARCHAR" hibernate-type="string"

not-null="false"&gt;

&lt;/sql-type&gt;

&lt;/type-mapping&gt;

&lt;table-filter match-catalog="hibernatenapratica" match-name="categoria"/&gt;

&lt;/hibernate-reverse-engineering&gt;</pre>
<p>Retornando a view <strong>Package Explorer</strong>, vamos configurar um console Hibernate para executar o arquivo de engenharia reversa criado. Cliquem com o direito do mouse sobre o arquivo <strong>hibernate.revenge.xml</strong> e selecionem, no menu de contexto, o item <strong>Hibernate Console Configuration</strong>.</p>
<table border="1">
<tbody>
<tr>
<td><strong>Atenção:</strong> Esta etapa não é realmente necessária quando já existe um console configurado. Entretanto, na primeira vez que configuramos um, o acesso não havia sido feito desta maneira.</td>
</tr>
</tbody>
</table>
<div id="attachment_437" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-39.jpg" rel="lightbox[395]"><img class="size-medium wp-image-437" title="Figura 39" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-39-300x115.jpg" alt="Figura 39 – Seleção do item Hibernate Console Configuration no menu de contexto" width="300" height="115" /></a><p class="wp-caption-text">Figura 39 – Seleção do item Hibernate Console Configuration no menu de contexto</p></div>
<p>Na caixa de dialogo, alterem o campo <strong>Name</strong> para <strong>ProjUtilizandoHibernateToolsAnnotations</strong>. Verifiquem se <strong>Configuration file</strong> está corretamente apresentando o arquivo <strong>hibernate.cfg.xml</strong>.</p>
<div id="attachment_438" class="wp-caption alignnone" style="width: 254px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-40.jpg" rel="lightbox[395]"><img class="size-medium wp-image-438" title="Figura 40" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-40-244x300.jpg" alt="Figura 40 – Diálogo de criação da configuração do console Hibernate para a engenharia reversa" width="244" height="300" /></a><p class="wp-caption-text">Figura 40 – Diálogo de criação da configuração do console Hibernate para a engenharia reversa</p></div>
<p>Através do botão <strong>Run As</strong> <a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/icone-run-as.jpg" rel="lightbox[395]"><img class="alignnone size-full wp-image-439" title="icone-run-as" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/icone-run-as.jpg" alt="" width="34" height="21" /></a>, clicando no pequeno triângulo que aponta para baixo,  encontramos um menu onde temos o item <strong>Hibernate Code Generation Configurations</strong>.</p>
<div id="attachment_440" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-411.jpg" rel="lightbox[395]"><img class="size-medium wp-image-440" title="Figura 41" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-411-300x126.jpg" alt="Figura 41 – Menu Run As com a opção Hibernate Code Generation Configurations" width="300" height="126" /></a><p class="wp-caption-text">Figura 41 – Menu Run As com a opção Hibernate Code Generation Configurations</p></div>
<p>Na caixa de diálogo <strong>Hibernate Code Generation Configurations</strong>, em <strong>Hibernate Code Generation</strong>, cliquem com o direito do mouse e selecionem, no menu de contexto, o item <strong>New</strong>.</p>
<div id="attachment_441" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-42.jpg" rel="lightbox[395]"><img class="size-medium wp-image-441" title="Figura 42" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-42-300x137.jpg" alt="Figura 42 – Acionando o menu de contexto em Hibernate Code Generation" width="300" height="137" /></a><p class="wp-caption-text">Figura 42 – Acionando o menu de contexto em Hibernate Code Generation</p></div>
<p>Na lateral direita, tenham <strong>ProjUtilizandoHibernateToolsAnnotations</strong> em <strong>Console configuration</strong> selecionado. Em <strong>Output directory</strong>, cliquem em <strong>Browse</strong> e selecionem o local onde será(ão) gerada(s) a(s) classe(s), neste caso.</p>
<p>Digitem o pacote em <strong>Package</strong> e, em <strong>reveng.xml</strong>, cliquem em <strong>Setup</strong>.</p>
<div id="attachment_442" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-43.jpg" rel="lightbox[395]"><img class="size-medium wp-image-442" title="Figura 43" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-43-300x253.jpg" alt="Figura 43 – Configuração inicial da aba Main em Hibernate Code Generation Configurations" width="300" height="253" /></a><p class="wp-caption-text">Figura 43 – Configuração inicial da aba Main em Hibernate Code Generation Configurations</p></div>
<p>Ao surgir o diálogo <strong>Setup reverse engineering</strong>, cliquem em <strong>Use existing</strong>.</p>
<div id="attachment_443" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-44.jpg" rel="lightbox[395]"><img class="size-medium wp-image-443" title="Figura 44" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-44-300x77.jpg" alt="Figura 44 – Selecionando o botão Use existing " width="300" height="77" /></a><p class="wp-caption-text">Figura 44 – Selecionando o botão Use existing </p></div>
<p>Selecionem o item <strong>hibernate.reveng.xml</strong> e confirmem no botão <strong>OK</strong>.</p>
<div id="attachment_444" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-45.jpg" rel="lightbox[395]"><img class="size-medium wp-image-444" title="Figura 45" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-45-300x287.jpg" alt="Figura 45 – Seleção do arquivo hibernate.reveng.xml" width="300" height="287" /></a><p class="wp-caption-text">Figura 45 – Seleção do arquivo hibernate.reveng.xml</p></div>
<p>Retornando ao diálogo <strong>Hibernate Code Generation Configurations</strong>, ainda na aba <strong>Main</strong>, temos todas as informações que desejamos preenchidas, como na <strong>Figura 46</strong>.</p>
<div id="attachment_445" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-46.jpg" rel="lightbox[395]"><img class="size-medium wp-image-445" title="Figura 46" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-46-300x253.jpg" alt="Figura 46 – Aba Main do diálogo Hibernate Code Generation Configurations preenchido" width="300" height="253" /></a><p class="wp-caption-text">Figura 46 – Aba Main do diálogo Hibernate Code Generation Configurations preenchido</p></div>
<p>Agora iremos na aba <strong>Exporters</strong>, ao qual iremos marcar <strong>Generate EJB 3 annotations</strong> e <strong>Domain code (.java)</strong>.</p>
<div id="attachment_446" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-47.jpg" rel="lightbox[395]"><img class="size-medium wp-image-446" title="Figura 47" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-47-300x285.jpg" alt="Figura 47 – Opções de exportação da caixa de diálogo Hibernate Code Generation Configurations" width="300" height="285" /></a><p class="wp-caption-text">Figura 47 – Opções de exportação da caixa de diálogo Hibernate Code Generation Configurations</p></div>
<p>Por fim, vamos clicar no botão <strong>Run</strong> para executar a engenharia reversa.</p>
<div id="attachment_447" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-48.jpg" rel="lightbox[395]"><img class="size-medium wp-image-447" title="Figura 48" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/06/Figura-48-300x298.jpg" alt="Figura 48 – Executando a engenharia reversa através do botão Run" width="300" height="298" /></a><p class="wp-caption-text">Figura 48 – Executando a engenharia reversa através do botão Run</p></div>
<p>Neste último exemplo, o resultado é a classe Categoria sendo criada com anotações.</p>
<p><strong>Considerações finais</strong></p>
<p>Como vocês puderam ver, o Hibernate Tools é uma ferramenta bem interessante para aqueles que trabalham com o framework Hibernate. Seja para criar suas configurações através dos assistentes, para executar as queries HQL ou Criteria em seus editores, vale a pena  instalar e conhecer este plugin do Eclipse IDE.</p>
<p>Até o próximo artigo pessoALL.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/06/27/hibernate-com-hibernate-tools/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>JPA 2.0 na Prática – Parte 3</title>
		<link>http://www.edsongoncalves.com.br/2010/04/10/jpa-2-0-na-pratica-parte-3/</link>
		<comments>http://www.edsongoncalves.com.br/2010/04/10/jpa-2-0-na-pratica-parte-3/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 09:48:50 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[EclipseLink]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[JPA Project]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=278</guid>
		<description><![CDATA[Olá, tudo bom? Como vão vocês? Este artigo é o terceiro de uma série ao qual vou ensiná-los a trabalhar com a Java Persistence API 2.0 (JPA 2.0).  Dúvidas e críticas são bem vindas. Conhecendo as anotações básicas em uma Entidade Como pudemos perceber no artigo  JPA 2.0 na Prática – Parte 2, as entidades [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, tudo bom? Como vão vocês?</p>
<p>Este artigo é o terceiro de uma série ao qual vou ensiná-los a  trabalhar com a Java Persistence API 2.0 (JPA 2.0).  Dúvidas e críticas  são bem vindas.</p>
<h1>Conhecendo as anotações básicas em uma Entidade</h1>
<p>Como pudemos perceber no artigo  <strong><a href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">JPA 2.0 na Prática – Parte 2</a></strong>, as entidades representam as tabelas encontradas no banco de dados. Entretanto, nem sempre refletirão exatamente o modelo da entidade relacional encontrado no banco de dados mas, com certeza, são suas representações, só que em formato de objetos – o que chamamos de <a href="http://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional">O/R (Object-to-Relational)</a>.</p>
<h2>Anotando uma classe simples</h2>
<p>Entidades são classes Java Simples (POJOs) na JPA.  Ao fazer a Entidade Bean Categoria, em <strong><a href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">JPA 2.0 na Prática – Parte 2</a></strong>, adicionamos anotações que representavam certas características que deveriam ser refletidas na entidade relacional, como nome da tabela e o campo de chave primária.</p>
<p>A entidade Categoria é simples e possui atributos privados que  são refletidos, tais como escritos na entidade, em seu equivalente, na tabela da entidade relacional.</p>
<p>A classe Categoria também é formada por métodos públicos getters e setters, tais como são os JavaBeans comuns.</p>
<p>Para que uma classe, como no caso da Categoria criada, não seja considerada um simples JavaBean e sim uma Entidade Bean da Java Persistence, precisamos de duas anotações básicas:</p>
<p><strong>javax.persistence.Entity</strong> <strong> &#8211; </strong>Informa que classe é uma Entidade;<strong> </strong></p>
<p><strong>javax.persistence.Id – </strong>Informa o atributo na classe que será utilizado como chave primária;</p>
<p>Na ausência das demais anotações, o nome da tabela e das colunas existentes na entidade relacional, do banco de dados, são tidos pelo provedor de persistência como sendo exatamente iguais aos encontrados na Entidade Bean.</p>
<p>Desta forma, se mapearmos uma entidade bean como na <strong>Listagem 1</strong>, teremos uma tabela no banco de dados, procurada ou criada pelo provedor de persistência similar ao da <strong>Listagem 2</strong>.</p>
<p><strong>Listagem 1 – Entidade Bean Categoria</strong></p>
<p>﻿</p>
<pre class="brush:java">
package br.com.integrator;

import java.io.Serializable;

import java.lang.*;

import javax.persistence.*;

@Entity

public class Categoria implements Serializable {

@Id

private Long id;

private String categoria;

private String descricao;

//getters e setters omitidos

}
</pre>
<p><strong>Listagem 2 – A tabela Categoria no banco de dados MySQL</strong></p>
<pre class="brush:text">
create table Categoria(

id bigint(20) primary key not null,

categoria varchar(255),

descricao varchar(255)

);</pre>
<h3>Anotações @Table, @Column e @Id</h3>
<p>Se necessitarmos definir o nome de uma tabela, como foi feito em <strong><a href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">JPA 2.0 na Prática – Parte 2</a></strong>, utilizamos a notação <strong>@Table</strong>, de <strong>javax.persistence.Table</strong>. O mesmo também pode ser feito para dar nomes a colunas, utilizando a anotação <strong>@Column</strong>, de <strong>javax.persistence.Column</strong>. Desta forma, se fizermos a modificação na classe <strong>Categoria</strong>, como na <strong>Listagem 3</strong>, teremos o resultado mostrado na <strong>Figura 1</strong>.</p>
<p><strong>Listagem 3 – Utilizando as anotações @Table e @Column</strong></p>
<pre class="brush:java">
@Entity

@Table(name="categorias")

public class Categoria implements Serializable {

@Id

@Column(name="categoria_id", nullable=false, columnDefinition="integer")

private Long id;

@Column(name="categoria_nome", length=30, nullable=false)

private String categoria;

@Column(columnDefinition="text")

private String descricao;

//getters e setters omitidos

}
</pre>
<div id="attachment_279" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/04/Figura-11.jpg" rel="lightbox[278]"><img class="size-medium wp-image-279" title="Figura 1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/04/Figura-11-300x134.jpg" alt="Figura 1 – Anotações da Entidade Categoria refletida na tabela categorias no banco de dados" width="300" height="134" /></a><p class="wp-caption-text">Figura 1 – Anotações da Entidade Categoria refletida na tabela categorias no banco de dados</p></div>
<p>A <strong>Listagem 3</strong> exibe os atributos contidos na anotação <strong>@Column</strong>, que são úteis no mapeamento de uma tabela equivalente no banco de dados. Temos os seguintes atributos utilizados no exemplo:</p>
<p><strong>name</strong> – Nome da coluna na tabela do banco de dados, recebe como valor uma String;</p>
<p><strong>columnDefinition </strong> &#8211; Recebe uma String com o tipo que será usado pela coluna equivalente na tabela do banco de dados. Um exemplo é a coluna <strong>descricao</strong> que possui <strong>columnDefinition</strong> como <strong>text</strong>.</p>
<p><strong>length</strong> – Alguns tipos de colunas nas tabelas dos bancos de dados possuem um valor variável de largura do campo. Um exemplo são os campos <strong>varchar()</strong>. No MySQL, se não definirmos um valor de largura para o tipo <strong>varchar</strong>, este é criado em seu tamanho máximo de caracteres, que no caso é 255. Cada banco de dados possui um limite máximo em seu determinado tipo.</p>
<p><strong>nullable – </strong>Recebe um valor booleano cujo o padrão é <strong>true</strong>, caso não declarado. Se <strong>false</strong>,  este campo é obrigatório.</p>
<p>A anotação <strong>@Id</strong>, mostrada pela primeira vez em <strong><a href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">JPA 2.0 na Prática – Parte 2</a></strong>, possui  uma anotação dependente, chamada de <strong>@javax.persistence.GeneratedValue</strong>.  Esta anotação é utilizada quando desejamos que o provedor de persistência gere as chaves para nós.</p>
<p>A anotação <strong>@GeneratedValue</strong> possui um atributo chamado <strong>strategy</strong>, que define a estratégia de geração de valores incrementados. A estratégia mais comum é <strong>javax.persistence.</strong><strong>GeneratorType.AUTO</strong>, mas no exemplo visto na <strong><a href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">parte 2</a></strong> dos artigos sobre JPA, utilizamos <strong>javax.persistence.</strong><strong>GeneratorType. IDENTITY</strong>.</p>
<p>Entretanto, alguns gerenciadores de banco de dados, como Oracle, possuem uma estrutura predefinida para gerar valores seqüenciais. Nestes casos, utilizamos a anotação <strong>@javax.persistence.SequenceGenerator</strong>. A <strong>Listagem 4</strong> exibe esta anotação utilizada em um banco de dados ORACLE.</p>
<p><strong>Listagem 4 – Utilizando a anotação @SequenceGenerator</strong></p>
<pre class="brush:java">
@Entity

@Table(name="CATEGORIAS_TABLE")

@SequenceGenerator(name="CATEGORIA_SEQUENCE", sequenceName="MINHA_SEQ", initialValue=1, allocationSize=1)

public class Categoria implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CATEGORIA_SEQUENCE")

private Long id;

@Column(length=30, nullable=false)

private String categoria;

@Column(length=3500)

private String descricao;

//getters e setters omitidos

}
</pre>
<p>A anotação <strong>@SequenceGenerator</strong> possui um atributo <strong>name</strong> do qual é referenciado em <strong>@GeneratedValue</strong>, através do atributo <strong>generator</strong>. A anotação <strong>@GeneratedValue</strong> também precisa utilizar, no atributo <strong>strategy</strong>, o valor <strong>GenerationType.SEQUENCE</strong>.</p>
<p>O nome da <strong>sequence</strong> gerada no Oracle, por exemplo, seria a colocada no atributo <strong>sequenceName</strong>, de <strong>@SequenceGenerator</strong>.</p>
<p>Também, em <strong>@SequenceGenerator</strong> temos os atributos <strong>initialValue</strong> e  <strong>allocationSize<a href="#_ftn1jpap3"><strong>[1]<strong><a name="_ftnref1jpap3"></a></strong></strong></a></strong>.  O resultado de uma <strong>sequence</strong> criada no banco de dados Oracle, com estas informações fornecidas pela entidade, através da JPA, pode ser vista na <strong>Figura 2</strong>.</p>
<div id="attachment_280" class="wp-caption alignnone" style="width: 310px"><a href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/04/Figura-21.jpg" rel="lightbox[278]"><img class="size-medium wp-image-280" title="Figura 2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/04/Figura-21-300x273.jpg" alt="Figura 2 – Sequencia gerada no Oracle XE e visualizada pelo Browser de Objetos" width="300" height="273" /></a><p class="wp-caption-text">Figura 2 – Sequencia gerada no Oracle XE e visualizada pelo Browser de Objetos</p></div>
<p><strong>Atenção:</strong> A forma como adicionamos a anotação <strong>@javax.persistence.Id</strong> na Entidade determina como podemos declarar as demais anotações no Bean. Se colocarmos a anotação <strong>@Id </strong>nos atributos, as demais precisam estar nos atributos. Se colocarmos no método <strong>getter</strong>, as demais precisarão estar nos métodos getters.</p>
<p><strong> </strong></p>
<h2><strong>Na próxima parte</strong></h2>
<p>Na <strong>Parte 3 </strong>da série <strong>JPA 2.0 na Prática</strong> aprendemos as anotações básicas que podemos utilizar para criar uma entidade bean e tê-la refletida em uma tabela no banco de dados relacional.</p>
<hr size="1" /><a href="#_ftnref1jpap3">[1]<a name="_ftn1jpap3"></a></a> Sem o atributo <strong>allocationSize</strong> em <strong>1</strong>, o Oracle, por exemplo, usando o Hibernate como provedor JPA, criará uma <strong>sequence</strong> com valor de 50 em 50.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/04/10/jpa-2-0-na-pratica-parte-3/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>JPA 2.0 na Prática com Hibernate 3.5</title>
		<link>http://www.edsongoncalves.com.br/2010/03/09/jpa-2-0-na-pratica-com-hibernate-3-5/</link>
		<comments>http://www.edsongoncalves.com.br/2010/03/09/jpa-2-0-na-pratica-com-hibernate-3-5/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 00:07:04 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JPA Project]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=236</guid>
		<description><![CDATA[Olá, tudo bom? Como vão vocês? Embora meus artigos sobre JPA 2.0 tenham uma sequencia, este em especial está sendo postado para sanar as dúvidas de vários leitores que me pediram para ensiná-los a usar o Hibernate 3.5, como ORM provider, para trabalhar com JPA 2.0. Dúvidas e críticas são bem vindas. Preparação do ambiente [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, tudo bom? Como vão vocês?<br />
Embora meus artigos sobre JPA 2.0 tenham uma sequencia, este em especial está sendo postado para sanar as dúvidas de vários leitores que me pediram para ensiná-los a usar o Hibernate 3.5, como ORM provider, para trabalhar com JPA 2.0.<br />
Dúvidas e críticas são bem vindas.</p>
<h2>Preparação do ambiente de trabalho</h2>
<p>Se você olhou o artigo <a href="../2010/01/25/jpa-2-0-na-pratica-parte-1/" target="_self">JPA na Prática – Parte 1</a>, será similar no banco de dados e  na ferramenta porém, haverá uma modificação na biblioteca JPA.</p>
<h3>A  biblioteca JPA</h3>
<p>O Hibernate é um ORM como o EclipseLink, muito utilizado no desenvolvimento Web com Java,  cujo a versão 3.5 possui suporte a Java Persistence API 2.0.  Você pode baixá-la <a href="https://www.hibernate.org/">clicando aqui</a>. Clique em <strong>Download</strong>, no menu lateral esquerdo.</p>
<p>A versão, no momento em que escrevo, é a 3.5.0-CR-2 (ainda em desenvolvimento).</p>
<p>Os arquivos que terá de baixar serão:</p>
<ul>
<li><strong>Hibernate Core </strong></li>
<li><strong>Hibernate JPAModelGen </strong></li>
</ul>
<p>Ao baixar os arquivos, descompacte-os.  Você precisará das seguintes bibliotecas:</p>
<ul>
<li><strong>hibernate3.jar</strong></li>
<li><strong>antlr-2.7.6.jar</strong></li>
<li><strong>commons-collections-3.1.jar</strong></li>
<li><strong>dom4j-1.6.1.jar</strong></li>
<li><strong>javassist-3.9.0.GA.jar</strong></li>
<li><strong>jta-1.1.jar</strong></li>
<li><strong>slf4j-api-1.5.8.jar</strong></li>
<li><strong>hibernate-jpa-2.0-api-1.0.0-CR-1.jar</strong></li>
</ul>
<p>Além destes arquivos, será necessário utilizar as bibliotecas da <a href="http://www.slf4j.org/">Simple Logging Facade for Java</a>, SLF4J. Baixe o arquivo com todas as bibliotecas da SLF4J <a href="http://www.slf4j.org/download.html">aqui</a>.</p>
<p>Descompacte o arquivo após baixá-lo.  Você precisará das seguintes bibliotecas:</p>
<ul>
<li><strong>slf4j-jdk14-1.5.11.jar</strong></li>
<li><strong>slf4j-log4j12-1.5.11.jar</strong></li>
</ul>
<h3>O Projeto</h3>
<p>O projeto para este pequeno tutorial é o mesmo do criado no artigo <a href="../2010/01/25/jpa-2-0-na-pratica-parte-1/" target="_self">JPA na Prática – Parte 1</a>, portanto não será explicado novamente como fazê-lo.</p>
<h4>As bibliotecas no projeto</h4>
<p>Podemos tanto criar uma biblioteca de usuário, contendo todas elas ou, simplesmente, adicionar todas ao seu projeto.</p>
<div id="attachment_237" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-237" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/03/Figura-1.jpg" rel="lightbox[236]"><img class="size-medium wp-image-237" title="Figura 1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/03/Figura-1-300x200.jpg" alt="Figura 1 – Bibliotecas do Hibernate 3.5 e SLF4J adicionadas ao projeto" width="300" height="200" /></a><p class="wp-caption-text">Figura 1 – Bibliotecas do Hibernate 3.5 e SLF4J adicionadas ao projeto</p></div>
<h3>Configurando o arquivo persistence.xml</h3>
<p>Similar ao mostrado na <strong><a title="Permanent Link to JPA 2.0 na Prática – Parte 2" href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">JPA 2.0 na Prática – Parte 2</a>, </strong> no arquivo <strong>persistence.xml</strong>, altere-o conforme a <strong>Listagem 1</strong> abaixo:<br />
<strong>Listagem 1 &#8211;  O arquivo persistence.xml</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&gt;

&lt;persistence-unit name="JpaNaPratica" transaction-type="RESOURCE_LOCAL"&gt;

&lt;class&gt;br.com.integrator.Categoria&lt;/class&gt;

&lt;properties&gt;

&lt;property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpapratica"&gt;&lt;/property&gt;

&lt;property name="javax.persistence.jdbc.user" value="edson"&gt;&lt;/property&gt;

&lt;property name="javax.persistence.jdbc.password" value="integrator"&gt;&lt;/property&gt;

&lt;property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"&gt;&lt;/property&gt;

&lt;property name="hibernate.show_sql" value="true" /&gt;

&lt;property name="hibernate.format_sql" value="true" /&gt;

&lt;property name="hibernate.hbm2ddl.auto" value="create"/&gt;

&lt;/properties&gt;

&lt;/persistence-unit&gt;

&lt;/persistence&gt;</pre>
<p>Infelizmente, nem todas as propriedades de <strong>persistence.xml</strong> são padronizadas, conforme já dito no artigo <strong>JPA na Prática – Parte 2</strong>. Para exibir a saída das instruções SQL geradas, assim como outras informações, as seguintes propriedades foram  adicionadas ao arquivo <strong>persistence.xml</strong>:</p>
<pre class="brush:xml">&lt;property name="hibernate.show_sql" value="true" /&gt;

&lt;property name="hibernate.format_sql" value="true" /&gt;</pre>
<p>Para criar a tabela, utilizamos a seguinte adição:</p>
<p><strong>&lt;property name=&#8221;hibernate.hbm2ddl.auto&#8221; value=&#8221;create&#8221;/&gt;</strong></p>
<h3>Testando o Projeto</h3>
<p>Similar ao mostrado na <strong><a title="Permanent Link to JPA 2.0 na Prática – Parte 2" href="../2010/02/03/jpa-2-0-na-pratica-parte-2/">JPA 2.0 na Prática – Parte 2, </a></strong> execute a classe com o método <strong>main()</strong> e veja os resultados refletidos no banco de dados.<strong> </strong></p>
<h2>Hibernate ou EclipseLink?</h2>
<p>Muitos me perguntam isso, querendo saber qual é o melhor. O ideal, como sempre, é conhecer ambos e tirar as suas próprias conclusões. Em JPA 2.0, ao menos por enquanto, no que foi mostrado, não há diferença.</p>
<p>Abraço a todos e até o próximo artigo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/03/09/jpa-2-0-na-pratica-com-hibernate-3-5/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>JPA 2.0 na Prática – Parte 2</title>
		<link>http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/</link>
		<comments>http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 16:13:19 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[EclipseLink]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JPA Project]]></category>
		<category><![CDATA[JSF 2.0]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=82</guid>
		<description><![CDATA[Olá, tudo bom? Como vão vocês? Este artigo é o segundo de uma série ao qual vou ensiná-los a trabalhar com a Java Persistence API 2.0 (JPA 2.0).  Dúvidas e críticas são bem vindas. Os primeiros passos na JPA Com o ambiente configurado, agora podemos  configurar a JPA e dar nossos primeiros passos em sua [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, tudo bom? Como vão vocês?</p>
<p>Este artigo é o segundo de uma série ao qual vou ensiná-los a trabalhar com a Java Persistence API 2.0 (JPA 2.0).  Dúvidas e críticas são bem vindas.</p>
<h1><span style="font-size: x-large;">Os primeiros passos na JPA</span></h1>
<p>Com o ambiente configurado, agora podemos  configurar a JPA e dar nossos primeiros passos em sua execução, entendendo como funciona e o que podemos fazer.</p>
<p>Esta parte do artigo está baseada na configuração, criação da entidade e manipulação básica do banco de dados.</p>
<p>Caso você tenha chegado agora, a <a href="../2010/01/25/jpa-2-0-na-pratica-parte-1/" target="_blank">Parte 1 do artigo</a> ensina como configurar o seu ambiente de desenvolvimento e testes.</p>
<h3>Configurando o arquivo persistence.xml</h3>
<p>Ao criar o projeto, também foram criados um diretório e arquivo. Note o arquivo chamado <strong>persistence.xml</strong>,  encontrado no diretório <strong>META-INF</strong>, dentro de <strong>src</strong>.</p>
<p>Abra o arquivo <strong>persistence.xml</strong> e verá que o Eclipse IDE possui um editor do arquivo.</p>
<p>Sua estrutura básica é como mostrada na <strong>Listagem 1</strong> abaixo:<br />
<strong>Listagem 1 – O arquivo persistence.xml</strong></p>
<pre class="brush:xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence

http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&gt;

&lt;persistence-unit&gt;

&lt;/persistence-unit&gt;

&lt;/persistence&gt;</pre>
<p>Ela pode ser visualizada no Editor do Eclipse, em <strong>Source</strong>.</p>
<h4>Configurando a conexão com o banco de dados</h4>
<p>No editor do Eclipse, vá na aba <strong>Connection</strong>, em persistence.xml.</p>
<div id="attachment_83" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-83" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-20/"><img class="size-medium wp-image-83" title="Figura-20" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-20-300x218.jpg" alt="Adicionando as configurações de conexão ao persistence.xml" width="300" height="218" /></a><p class="wp-caption-text">Adicionando as configurações de conexão ao persistence.xml</p></div>
<p>Comece alterando para <strong>Resource Local </strong>em <strong>Transaction type</strong>.</p>
<p><a rel="attachment wp-att-84" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-20-1/"><img class="alignnone size-full wp-image-84" title="Figura-20-1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-20-1.jpg" alt="" width="813" height="24" /></a></p>
<p>Esta pequena alteração adiciona o atributo <strong>transaction-type</strong> com o valor <em>&#8220;RESOURCE_LOCAL&#8221;</em> em <strong>&lt;persistence-unit/&gt;</strong> no arquivo <strong>persistence.xml</strong>.  O atributo <strong>transaction-type</strong> está definindo que a unidade de persistência terá sua integridade gerida  através da API local (RESOURCE_LOCAL), que é o nosso caso, onde não haverá um servidor de aplicativos Java EE por enquanto envolvido para transações JTA (<a href="http://pt.wikipedia.org/wiki/Java_Transaction_API">Java Transaction API</a>).</p>
<p>Mais abaixo, em <strong>EclipseLink Connection Pool</strong>, clique em <strong>Populate from Connection</strong>.</p>
<div id="attachment_85" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-85" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-20-2/"><img class="size-medium wp-image-85" title="Figura-20-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-20-2-300x106.jpg" alt="Adicionando os parâmetros de conexão no arquivo persistence.xml" width="300" height="106" /></a><p class="wp-caption-text">Adicionando os parâmetros de conexão no arquivo persistence.xml</p></div>
<p>Ao abrir a caixa de diálogo <strong>Connection Selection</strong>, selecione a conexão do MySQL que fez na criação do projeto e confirme.</p>
<div id="attachment_86" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-86" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-20-3/"><img class="size-medium wp-image-86" title="Figura-20-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-20-3-300x252.jpg" alt="Conexão do MySQL feita na criação do Projeto" width="300" height="252" /></a><p class="wp-caption-text">Conexão do MySQL feita na criação do Projeto</p></div>
<p>Ao retornar ao arquivo <strong>persistence.xml</strong>, os dados pertencentes ao banco de dados estarão preenchidos.</p>
<div id="attachment_87" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-87" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-20-4/"><img class="size-medium wp-image-87" title="Figura-20-4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-20-4-300x57.jpg" alt="Configurações para a conexão ao banco de dados" width="300" height="57" /></a><p class="wp-caption-text">Configurações para a conexão ao banco de dados</p></div>
<p>Esta mudança da conexão alterou o arquivo <strong>persistence.xml</strong> da seguinte forma:</p>
<pre class="brush:xml">&lt;properties&gt;
&lt;property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpapratica"/&gt;
&lt;property name="javax.persistence.jdbc.user" value="edson"/&gt;
&lt;property name="javax.persistence.jdbc.password" value="integrator"/&gt;
&lt;property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/&gt;
&lt;/properties&gt;</pre>
<p>Na JPA 2.0, algumas propriedades foram padronizadas. As propriedades que foram adicionadas ao arquivo <strong>persistence.xml</strong> são padrões para se conectar ao banco de dados. Veja o que significa cada uma delas:</p>
<ul>
<li><em>javax.persistence.jdbc.driver </em>— o nome do driver da classe totalmente qualificado</li>
<li><em>javax.persistence.jdbc.url </em>— URL específico do driver</li>
<li><em>javax.persistence.jdbc.user </em>— usuário do banco de dados para a conexão</li>
<li><em>javax.persistence.jdbc.password </em>— senha do banco de dados para a conexão</li>
</ul>
<p>Vá agora até a aba <strong>Logging</strong> e, em <strong>Logging level</strong>, altere para <strong>All</strong>. Isso tornará visível todas as operações que fizemos, utilizando a JPA, no Console do Eclipse.</p>
<div id="attachment_88" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-88" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-20-5/"><img class="size-medium wp-image-88" title="Figura 20-5" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-20-5-300x247.jpg" alt="Alterando o nível de logging para ALL" width="300" height="247" /></a><p class="wp-caption-text">Alterando o nível de logging para ALL</p></div>
<p>Infelizmente, nem todas as propriedades de <strong>persistence.xml</strong> foram padronizadas. A seguinte propriedade foi adicionada ao arquivo:</p>
<p>&lt;property name=<em>&#8220;eclipselink.logging.level&#8221;</em> value=<em>&#8220;ALL&#8221;/</em>&gt;</p>
<p>Ainda em <strong>persistence.xml</strong>, vá até a aba <strong>Schema Generation</strong>.  Nesta aba temos <strong>DDL generation type</strong>. Como não fizemos nenhuma tabela no banco de dados, teremos que criá-la ao executar nossa primeira entidade.</p>
<p>Temos três opções:</p>
<ul>
<li><strong>None</strong> – não ocorre nada;</li>
<li><strong>Create Tables</strong> – cria as tabelas baseando-se nas informações contidas nas entidades;</li>
<li><strong>Drop and Create Tables</strong> – exclui e cria as tabelas através das informações contidas nas entidades;</li>
</ul>
<p>Para o nosso trabalho inicial, vamos manter um ciclo de criação e exclusão,  selecionando <strong>Drop and Create Tables</strong>.</p>
<div id="attachment_89" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-89" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-21/"><img class="size-medium wp-image-89" title="Figura-21" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-21-300x203.jpg" alt="Gerando tabelas através da configuração de persistence.xml" width="300" height="203" /></a><p class="wp-caption-text">Gerando tabelas através da configuração de persistence.xml</p></div>
<p>As últimas alterações incluíram a seguinte propriedade:</p>
<p>&lt;property name=<em>&#8220;eclipselink.ddl-generation&#8221;</em> value=<em>&#8220;drop-and-create-tables&#8221;/</em>&gt;</p>
<p>Com estas mudanças, temos tudo pronto para trabalhar com a JPA.</p>
<h3>Criando sua primeira entidade</h3>
<p>Clique com o direito do mouse sobre <strong>src</strong>, do seu projeto JPA. Selecione no menu de contexto <strong>New&gt;Entity</strong>.</p>
<div id="attachment_90" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-90" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-23/"><img class="size-medium wp-image-90" title="Figura-23" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-23-300x220.jpg" alt="Criando uma entidade JPA no Eclipse IDE" width="300" height="220" /></a><p class="wp-caption-text">Criando uma entidade JPA no Eclipse IDE</p></div>
<p>Na caixa de diálogo <strong>New JPA Entity</strong>, preencha <strong>Java package </strong>e <strong>Class name</strong>, no caso: <strong>br.com.integrator</strong> e <strong>Categoria</strong>, respectivamente. Mantenha <strong>Entity </strong>em <strong>Inheritance</strong> e clique no botão <strong>Next</strong>.</p>
<div id="attachment_92" class="wp-caption alignnone" style="width: 293px"><a rel="attachment wp-att-92" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-24/"><img class="size-medium wp-image-92" title="Figura-24" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-24-283x300.jpg" alt="Criando a classe/entidade Categoria" width="283" height="300" /></a><p class="wp-caption-text">Criando a classe/entidade Categoria</p></div>
<p>Na segunda etapa, definimos o nome da tabela que será utilizada pela entidade Categoria e seus respectivos campos/colunas.</p>
<div id="attachment_93" class="wp-caption alignnone" style="width: 293px"><a rel="attachment wp-att-93" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-25/"><img class="size-medium wp-image-93" title="Figura-25" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-25-283x300.jpg" alt="Segunda etapa da criação da Entidade JPA" width="283" height="300" /></a><p class="wp-caption-text">Segunda etapa da criação da Entidade JPA</p></div>
<p>O Eclipse IDE, através do seu assistente, irá manter o nome da tabela como padrão existente ao nome da entidade. Desmarque <strong>Use default</strong> e altere para <strong>categorias</strong> em <strong>Table name</strong>.</p>
<p>Esta pequena alteração informa que a entidade Categoria está ligada a tabela <strong>categorias</strong> do banco de dados.</p>
<div id="attachment_94" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-94" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-25-0/"><img class="size-medium wp-image-94" title="Figura-25-0" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-25-0-300x49.jpg" alt="Alteração do nome da tabela para o banco de dados" width="300" height="49" /></a><p class="wp-caption-text">Alteração do nome da tabela para o banco de dados</p></div>
<p>Abaixo você vai encontrar <strong>Entity fields</strong>. Clique em <strong>Add</strong> para adicionar as os atributos que existirão na entidade Categoria e seus respectivos tipos.</p>
<div id="attachment_95" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-95" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-25-1/"><img class="size-medium wp-image-95" title="Figura-25-1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-25-1-300x82.jpg" alt="" width="300" height="82" /></a><p class="wp-caption-text">Detalhe da adição de atributos na entidade Categoria</p></div>
<p>O diálogo <strong>Entity Fields</strong> possui <strong>Type</strong> para colocar o tipo ( que também é acessível com Ctrl+Space) e o nome.</p>
<div id="attachment_96" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-96" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-25-2/"><img class="size-medium wp-image-96" title="Figura-25-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-25-2-300x131.jpg" alt="Adicionando um atributo" width="300" height="131" /></a><p class="wp-caption-text">Adicionando um atributo</p></div>
<p>Os atributos da entidade são mostrados na <strong>Figura</strong> abaixo:</p>
<div id="attachment_97" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-97" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-25-3/"><img class="size-medium wp-image-97" title="Figura-25-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-25-3-300x82.jpg" alt="Atributos da entidade Categoria" width="300" height="82" /></a><p class="wp-caption-text">Atributos da entidade Categoria</p></div>
<p>Veja que foi marcado <strong>id</strong> como <strong>key</strong>. Isso fará com que este atributo/campo seja a chave primária.</p>
<div id="attachment_98" class="wp-caption alignnone" style="width: 263px"><a rel="attachment wp-att-98" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-25-4/"><img class="size-medium wp-image-98" title="Figura-25-4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-25-4-253x300.jpg" alt="Diálogo completamente preenchido" width="253" height="300" /></a><p class="wp-caption-text">Diálogo completamente preenchido</p></div>
<p>Com tudo preenchido, clique no botão <strong>Finish</strong> para gerar a classe <strong>Categoria</strong> com as devidas anotações que a fará uma Entidade da JPA.</p>
<p>A classe/entidade Categoria possui a estrutura como mostrado na <strong>Listagem 2</strong> após sua geração:</p>
<p><strong>Listagem 2 &#8211; A entidade Categoria</strong></p>
<pre class="brush:java">package br.com.integrator;
import java.io.Serializable;
import java.lang.Long;
import java.lang.String;
import javax.persistence.*;
@Entity
@Table(name="categorias")
public class Categoria implements Serializable {
@Id
private Long id;
private String categoria;
private String descricao;
//getters e setters omitidos
}</pre>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">As entidades, na especificação da JPA, são POJOS (Plain Old Java Objects ), onde podemos alocar com o operador <strong>new</strong>, assim como faríamos com qualquer outro objeto Java simples. As instâncias de uma classe do tipo entidade não se tornam persistentes até estarem associadas a um EntityManager.</p>
<p class="MsoNormal">No arquivo <strong>persistence.xml</strong>, verá a classe adicionada em <strong>General</strong>&gt;<strong>Managed Classes</strong>.<strong> </strong></p>
<div id="attachment_99" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-99" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-26/"><img class="size-medium wp-image-99" title="Figura-26" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-26-300x224.jpg" alt="Detalhe de Managed Classes em persistence.xml" width="300" height="224" /></a><p class="wp-caption-text">Detalhe de Managed Classes em persistence.xml</p></div>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">No XML de persistence.xml, haverá a seguinte linha adicionada:</p>
<p class="MsoNormal"><em><span lang="EN-US">&lt;class&gt;</span></em><span lang="EN-US">br.com.integrator.Categoria<em>&lt;/class&gt;</em></span></p>
<p class="MsoNormal">O elemento <strong>&lt;class/&gt;</strong> lista explicitamente as classes que  são consideradas entidades no <strong>persistence.xml</strong>.</p>
<p class="MsoNormal">Para finalizar, vá até a classe Categoria. Na view <strong>JPA Structure</strong>, clique em <strong>id</strong>. Marque <strong>Primary key generation</strong> na view <strong>JPA Details</strong> e selecione <strong>Identity</strong> em <strong>Strategy</strong>. Isso informa a entidade que o campo da chave primária é auto-incrementado e, portanto, gerado pela tabela do banco de dados.</p>
<div id="attachment_100" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-100" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-27/"><img class="size-medium wp-image-100" title="Figura-27" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-27-300x167.jpg" alt="Definindo a estratégia de auto-incremento no campo id da entidade" width="300" height="167" /></a><p class="wp-caption-text">Definindo a estratégia de auto-incremento no campo id da entidade</p></div>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Na classe veremos a seguinte anotação: @GeneratedValue(strategy = <em>IDENTITY</em>), onde <strong>IDENTITY</strong> é de <strong>javax.persistence.GenerationType</strong>.</p>
<h3>Testando a JPA</h3>
<p class="MsoNormal">Antes de explicar qualquer coisa, vamos fazer um teste para saber se está tudo corretamente funcionando, simplesmente chamando a <strong>persistence-unit</strong> através de uma simples classe Java com um método <strong>main()</strong>.</p>
<p class="MsoNormal">Crie uma classe no próprio projeto JPA , chamando-a de <strong>TesteDaJPA</strong>. Coloque em um pacote diferente do qual vem usando e marque <strong>public static void main(String[] args)</strong>. Confirme a criação da classe no botão <strong>Finish</strong>.</p>
<p class="MsoNormal">
<div id="attachment_101" class="wp-caption alignnone" style="width: 268px"><a rel="attachment wp-att-101" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-32/"><img class="size-medium wp-image-101" title="Figura-32" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-32-258x300.jpg" alt="Criação da classe de testes" width="258" height="300" /></a><p class="wp-caption-text">Criação da classe de testes</p></div>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Altere a classe <strong>TesteDaJPA</strong> conforme a <strong>Listagem 3</strong>:</p>
<p><strong>Listagem 3 &#8211; A classe TesteDaJPA</strong></p>
<p class="MsoNormal">
<pre class="brush:java">package br.com.integrator.teste;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class TesteDaJPA {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaNaPratica");
EntityManager em = emf.createEntityManager();
em.close();
emf.close();
 }
}</pre>
<p class="MsoNormal"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal"><span lang="EN-US">Execute a classe através do menu <strong>Run&gt;Run As&gt;Java Application</strong>.</span></p>
<p class="MsoNormal">Graças à configuração que fizemos de  logging no arquivo <strong>persistence.xml </strong>(em <strong>&lt;property name=<em>&#8220;eclipselink.logging.level&#8221;</em> value=<em>&#8220;ALL&#8221;/</em>&gt;</strong>) , possuímos uma saída bem detalhada do que ocorreu ao gerar este simples teste.</p>
<p class="MsoNormal">Assim que iniciada a classe, veremos a saída contendo a conexão ao banco de dados:</p>
<pre class="MsoNormal"><span lang="EN-US">[EL Finest]: 2010-02-03 04:33:36.007--Thread(Thread[main,5,main])--DBPlatform: org.eclipse.persistence.platform.database.MySQLPlatform, RegularExpression: (?i)mysql.*.</span></pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Fine]: 2010-02-03 04:33:36.007--Thread(Thread[main,5,main])--Detected Vendor platform: org.eclipse.persistence.platform.database.MySQLPlatform</span></pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Config]: 2010-02-03 04:33:36.022--ServerSession(11025290)--Connection(29232906)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> platform=&gt;MySQLPlatform</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> user name=&gt; "edson"</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> datasource URL=&gt; "jdbc:mysql://localhost:3306/jpapratica"</span></pre>
<pre class="MsoNormal">))</pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Config]: 2010-02-03 04:33:36.022--ServerSession(11025290)--Connection(9616314)--Thread(Thread[main,5,main])--Connected: jdbc:mysql://localhost:3306/jpapratica</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> User: edson@localhost</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> Database: MySQL Version: 5.1.43-community</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> Driver: MySQL-AB JDBC Driver Version: mysql-connector-java-5.1.10 ( Revision: ${svn.Revision} )</span></pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Config]: 2010-02-03 04:33:36.022--ServerSession(11025290)--Connection(23255990)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> platform=&gt;MySQLPlatform</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> user name=&gt; "edson"</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> datasource URL=&gt; "jdbc:mysql://localhost:3306/jpapratica"</span></pre>
<pre class="MsoNormal"><span lang="EN-US">))</span></pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Config]: 2010-02-03 04:33:36.038--ServerSession(11025290)--Connection(16496587)--Thread(Thread[main,5,main])--Connected: jdbc:mysql://localhost:3306/jpapratica</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> User: edson@localhost</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> Database: MySQL Version: 5.1.43-community</span></pre>
<pre class="MsoNormal"><span lang="EN-US"> Driver: MySQL-AB JDBC Driver Version: mysql-connector-java-5.1.10 ( Revision: ${svn.Revision} )</span></pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Finest]: 2010-02-03 04:33:36.069--ServerSession(11025290)--Thread(Thread[main,5,main])--sequencing connected, state is NoPreallocation_State</span></pre>
<p class="MsoNormal">Entre a saída, veremos que, devido a configuração no <strong>persistence.xml</strong> (em <strong>&lt;property name=<em>&#8220;eclipselink.ddl-generation&#8221;</em> value=<em>&#8220;drop-and-create-tables&#8221;/</em>&gt;</strong>) , primeiro houve uma tentativa de fazer um <strong>drop table</strong> na tabela <strong>categorias</strong>. Como não existia tal tabela, veremos este erro:</p>
<pre class="MsoNormal">Internal Exception: <span style="text-decoration: underline;">com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException</span>: Unknown table 'categorias'</pre>
<pre class="MsoNormal"><span lang="EN-US">Error Code: 1051</span></pre>
<pre class="MsoNormal"><span lang="EN-US">Call: DROP TABLE categorias</span></pre>
<pre class="MsoNormal"><span lang="EN-US">Query: DataModifyQuery(sql="DROP TABLE categorias")</span></pre>
<pre class="MsoNormal">Em seguida veremos a criação da tabela na seguinte linha:</pre>
<pre class="MsoNormal"><span lang="EN-US">[EL Finest]: 2010-02-03 04:33:36.163--ServerSession(11025290)--Thread(Thread[main,5,main])--Execute query DataModifyQuery(sql="CREATE TABLE categorias (ID BIGINT AUTO_INCREMENT NOT NULL, CATEGORIA VARCHAR(255), DESCRICAO VARCHAR(255), PRIMARY KEY (ID))")</span></pre>
<p class="MsoNormal">Por fim, será possível ver que ocorre a desconexão ao banco de dados.</p>
<h4>A tabela gerada no banco de dados</h4>
<p class="MsoNormal">Ao entrar no banco de dados, veremos que a simples classe anotada se transformou em uma tabela. Evidentemente que o POJO, sem a devida configuração no arquivo persistence.xml, antes da sua chamada pela classe executora que fizemos de teste, não teria esse poder.</p>
<div id="attachment_102" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-102" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-33/"><img class="size-medium wp-image-102" title="Figura-33" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-33-300x151.jpg" alt="A tabela gerada no MySQL" width="300" height="151" /></a><p class="wp-caption-text">A tabela gerada no MySQL</p></div>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Graças a anotação <strong>@Table</strong>, pudemos dar o nome da tabela que seria gerada, através do atributo <strong>name</strong>.</p>
<p class="MsoNormal">
<div id="attachment_105" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-105" href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/figura-34/"><img class="size-medium wp-image-105" title="Figura-34" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/02/Figura-34-300x118.jpg" alt="" width="300" height="118" /></a><p class="wp-caption-text">Atributos convertidos em colunas</p></div>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">Observe que cada atributo da classe se transformou em uma coluna na tabela. A coluna chave, tida por <strong>ID</strong>, foi gerada graças à anotação <strong>@Id</strong>. Além disso, o MySQL considerou esta coluna como auto-incrementada, ou seja, ela possui um modificador que incrementa em um toda vez que uma informação é inserida na tabela. Isso é automático e gerenciado pelo banco de dados. A anotação <strong>@GeneratedValue</strong> foi a responsável pela geração do auto-increment do MySQL.</p>
<p class="MsoNormal">Os tipos de cada coluna são gerados pelo similar em Java. Logo, <strong>Long</strong> se transformou em <strong>bigint</strong> e <strong>String</strong> em <strong>varchar</strong>. Cada tipo de coluna, na tabela do banco de dados, possui também um tamanho definido na sua criação. Como não especificamos isso na classe Categoria, através de anotações, a tabela foi gerada utilizando o tamanho máximo obtido pelo tipo, isso no banco de dados em questão. Logo, <strong>Long</strong> se transformou em <strong>bigint(20)</strong> e <strong>String</strong> em <strong>varchar(255)</strong>.</p>
<p class="MsoNormal">
<h2>Na próxima parte</h2>
<p class="MsoNormal">Na <strong>Parte 2 </strong>da série <strong>JPA 2.0 na Prática</strong> finalmente fizemos  a configuração da JPA, possibilitando a conexão ao banco de dados. Também foi possível gerar uma tabela baseada em uma entidade da JPA através de um pequeno teste de utilização.</p>
<p class="MsoNormal">Em <a href="http://www.edsongoncalves.com.br/2010/04/10/jpa-2-0-na-pratica-parte-3/"><strong>JPA 2.0 na Prática – Parte 3</strong></a>, começaremos a compreender a Entidade em questão, suas várias anotações e implicações no banco de dados.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 5690px; width: 1px; height: 1px;">
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 415 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --> <!--[endif]--></p>
<p class="MsoNormal">As entidades, na especificação da JPA, são POJOS (Plain Old Java Objects ), onde podemos alocar com o operador <strong>new</strong>, assim como faríamos com qualquer outro objeto Java simples. As instâncias de uma classe do tipo entidade não se tornam persistentes até estarem associadas a um EntityManager.</p>
<p class="MsoNormal">No arquivo <strong>persistence.xml</strong>, verá a classe adicionada em <strong>General</strong>&gt;<strong>Managed Classes</strong>.<strong> </strong></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>JPA 2.0 na Prática – Parte 1</title>
		<link>http://www.edsongoncalves.com.br/2010/01/25/jpa-2-0-na-pratica-parte-1/</link>
		<comments>http://www.edsongoncalves.com.br/2010/01/25/jpa-2-0-na-pratica-parte-1/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 04:59:17 +0000</pubDate>
		<dc:creator>Edson Gonçalves</dc:creator>
				<category><![CDATA[JPA 2.0]]></category>
		<category><![CDATA[Eclipse IDE]]></category>
		<category><![CDATA[EclipseLink]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[JPA Project]]></category>

		<guid isPermaLink="false">http://www.edsongoncalves.com.br/?p=37</guid>
		<description><![CDATA[Olá, tudo bom? Como vão vocês? Este artigo é o primeiro de uma série ao qual vou ensiná-los a trabalhar com a Java Persistence API 2.0 (JPA 2.0).  Dúvidas e críticas são bem vindas. Preparando o ambiente Se você tem experiência com instruções SQL, JPA é  fácil de entender. A JPA trabalha com objetos diretamente [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, tudo bom? Como vão vocês?</p>
<p>Este artigo é o primeiro de uma série ao qual vou ensiná-los a trabalhar com a Java Persistence API 2.0 (JPA 2.0).  Dúvidas e críticas são bem vindas.</p>
<h1>Preparando o ambiente</h1>
<p>Se você tem experiência com instruções SQL, JPA é  fácil de entender. A JPA trabalha com objetos diretamente e converte as suas instruções para SQL através da JDBC, de modo a executar no banco de dados.</p>
<p>JPA na prática começará com um ambiente de trabalho simples, onde teremos as execuções fora do ambiente Java EE.</p>
<h2>O banco de dados</h2>
<p>O banco de dados utilizado será o <a href="http://www.mysql.com/" target="_blank">MySQL</a>. Você pode baixar a versão 5.1, utilizada no artigo, <a href="http://dev.mysql.com/downloads/mysql/" target="_blank">aqui</a>.</p>
<h3>Preparando o banco de dados do exemplo</h3>
<p>Abra o terminal do MySQL com seu usuário e senha ROOT (aquela que você configurou na instalação).</p>
<p>Crie o banco de dados executando o seguinte comando:</p>
<p><strong>create database jpapratica;</strong></p>
<h3>Baixando e descompactando o driver JDBC</h3>
<p>No mesmo local onde baixamos o <a href="http://www.mysql.com/" target="_blank">MySQL</a>, existe a versão atual do driver JDBC, chamado de <a href="http://dev.mysql.com/downloads/connector/j/5.1.html" target="_blank">Connector/J 5.1</a>. Baixe o arquivo e o descompacte.  O arquivo JAR do qual iremos precisar será:</p>
<p><strong> mysql-connector-java-5.1.10-bin.jar</strong></p>
<p><strong> </strong></p>
<h2>O ambiente de trabalho</h2>
<p>Os exemplos desenvolvidos serão criados no Eclipse IDE 3.6 M4, ao qual teremos uma breve explicação de como criar projetos JPA.</p>
<h3>Baixando o Eclipse</h3>
<p>No momento em que este artigo é criado, o Eclipse IDE 3.6 ainda está em desenvolvimento. Esta versão foi escolhida por possuir suporte a JPA 2.0. O pacote que vamos usar é o <a href="http://www.eclipse.org/downloads/" target="_blank">Eclipse IDE for Java EE Developers</a>.</p>
<div id="attachment_38" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-38" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-1.jpg" rel="lightbox[37]"><img class="size-medium wp-image-38  " title="Figura-1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-1-300x30.jpg" alt="Download Eclipse IDE 3.6" width="300" height="30" /></a><p class="wp-caption-text">Figura 1. Download do pacote Eclipse IDE 3.6 para Java EE</p></div>
<h3>A  biblioteca JPA</h3>
<p>O EclipseLink é a biblioteca oficial da Java Persistence API 2.0.  Você pode baixá-la <a href="http://www.eclipse.org/eclipselink/downloads/" target="_blank">clicando aqui</a>. O arquivo baixado para o exemplo é o <strong>EclipseLink 2.0.0 Installer Zip</strong>.</p>
<p>Ao baixar o arquivo, descompacte-o. Você precisará das seguintes bibliotecas:</p>
<ul>
<li><strong>eclipselink.jar</strong></li>
<li><strong>javax.persistence_2.0.0.v200911271158.jar</strong></li>
</ul>
<h3>Criando o projeto</h3>
<p>No Eclipse, na view <strong>Project Explorer</strong>, clique com o direito e selecione <strong>New&gt;JPA Project</strong>.</p>
<div id="attachment_43" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-43" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-21.jpg" rel="lightbox[37]"><img class="size-medium wp-image-43" title="Figura-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-21-300x206.jpg" alt="Criando um projeto JPA" width="300" height="206" /></a><p class="wp-caption-text">Figura 2. Criando um projeto JPA no Eclipse</p></div>
<p>Na caixa de diálogo <strong>New JPA Project</strong>, digite o nome do projeto em <strong>Project name</strong>. No exemplo que usaremos será chamado de <strong>JpaNaPratica</strong>. Em <strong>Configuration</strong>, mantenha em <strong>Minimal JPA 2.0 Configuration</strong>. Clique no botão <strong>Next</strong> para prosseguir.</p>
<div id="attachment_44" class="wp-caption alignnone" style="width: 245px"><a rel="attachment wp-att-44" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-31.jpg" rel="lightbox[37]"><img class="size-medium wp-image-44 " title="Figura-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-31-235x300.jpg" alt="Primeira etapa do projeto" width="235" height="300" /></a><p class="wp-caption-text">Figura 3. Primeira etapa da criação do projeto</p></div>
<p>A segunda etapa mantenha como está, prosseguindo com o botão <strong>Next</strong>.</p>
<div id="attachment_45" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-45" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-41.jpg" rel="lightbox[37]"><img class="size-medium wp-image-45" title="Figura-4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-41-300x239.jpg" alt="Segunda etapa da criação do Projeto" width="300" height="239" /></a><p class="wp-caption-text">Figura 4. Segunda etapa da criação do projeto</p></div>
<h4>As bibliotecas do EclipseLink no projeto</h4>
<p>Na terceira etapa, você vai configurar o EclipseLink 2.0. Para isso, clique no ícone <strong>Manage libraries</strong>.</p>
<div id="attachment_46" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-46" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-51.jpg" rel="lightbox[37]"><img class="size-medium wp-image-46" title="Figura-5" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-51-300x156.jpg" alt="Terceira etapa da criação do projeto" width="300" height="156" /></a><p class="wp-caption-text">Figura 5. Terceira etapa da criação do projeto - Clicando no ícone Manage libraries</p></div>
<p>Na caixa de diálogo <strong>Preferences</strong>, clique no botão <strong>New</strong>.</p>
<div id="attachment_47" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-47" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-61.jpg" rel="lightbox[37]"><img class="size-medium wp-image-47" title="Figura-6" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-61-300x212.jpg" alt="Caixa de diálogo Preferences" width="300" height="212" /></a><p class="wp-caption-text">Figura 6. Caixa de diálogo Preferences - Botão New</p></div>
<p>Na caixa de diálogo <strong>New User Library</strong> digite <strong>EclipseLink</strong> e confirme no botão <strong>OK</strong>.</p>
<div id="attachment_48" class="wp-caption alignnone" style="width: 263px"><a rel="attachment wp-att-48" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-71.jpg" rel="lightbox[37]"><img class="size-full wp-image-48" title="Figura-7" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-71.jpg" alt="Caixa de diálogo New User Library" width="253" height="185" /></a><p class="wp-caption-text">Figura 7. Caixa de diálogo New User Library</p></div>
<p>Ao retornar a caixa de diálogo <strong>Preferences</strong>, clique no botão <strong>Add JARs</strong> e selecione as bibliotecas do <strong>EclipseLink</strong>.</p>
<div id="attachment_49" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-49" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-81.jpg" rel="lightbox[37]"><img class="size-medium wp-image-49" title="Figura-8" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-81-300x205.jpg" alt="Caixa de diálogo Preferences - botão Add JARs" width="300" height="205" /></a><p class="wp-caption-text">Figura 8. Caixa de diálogo Preferences - botão Add JARs</p></div>
<p>Após selecioná-las, confirme a caixa de diálogo no botão <strong>OK</strong>.</p>
<div id="attachment_50" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-50" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-9.jpg" rel="lightbox[37]"><img class="size-medium wp-image-50" title="Figura-9" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-9-300x218.jpg" alt="Biblioteca EclipseLink com os JARs adicionados" width="300" height="218" /></a><p class="wp-caption-text">Figura 9. Biblioteca EclipseLink com os JARs adicionados</p></div>
<p>Ao retornar ao diálogo de criação do seu projeto, marque a biblioteca <strong>EclipseLink</strong> que agora está lá.</p>
<div id="attachment_51" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-51" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-10.jpg" rel="lightbox[37]"><img class="size-medium wp-image-51" title="Figura-10" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-10-300x110.jpg" alt="Biblioteca EclipseLink adicionada na criação do projeto" width="300" height="110" /></a><p class="wp-caption-text">Figura 10. Biblioteca EclipseLink adicionada na criação do projeto</p></div>
<h4>A conexão no Eclipse e a biblioteca do banco de dados no projeto</h4>
<p>Abaixo, em <strong>Connection</strong>, clique em <strong>Add connection</strong>.</p>
<div id="attachment_52" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-52" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-111.jpg" rel="lightbox[37]"><img class="size-medium wp-image-52" title="Figura-11" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-111-300x153.jpg" alt="Detalhe em Add Connection na criação do projeto" width="300" height="153" /></a><p class="wp-caption-text">Figura 11. Detalhe em Add Connection na criação do projeto</p></div>
<p>Na caixa de diálogo <strong>New Connection Profile</strong>, selecione o <strong>MySQL</strong> e dê o nome da sua conexão em <strong>Name</strong>. Prossiga clicando no botão <strong>Next</strong>.</p>
<div id="attachment_53" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-53" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-12.jpg" rel="lightbox[37]"><img class="size-medium wp-image-53" title="Figura-12" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-12-300x272.jpg" alt="Caixa de diálogo New Connection Profile" width="300" height="272" /></a><p class="wp-caption-text">Figura 12. Caixa de diálogo New Connection Profile</p></div>
<p>Na próxima etapa, você precisa adicionar definir o driver JDBC do banco de dados MySQL. Clique no ícone <img title="Figura 13-0" src="../wp-content/uploads/2010/01/Figura-13-0.jpg" alt="" width="23" height="22" /> (<strong>New Driver Definition</strong>).</p>
<div id="attachment_57" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-57" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13.jpg" rel="lightbox[37]"><img class="size-medium wp-image-57 " title="Figura 13" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-300x40.jpg" alt="Detalhe da localização do ícone New Driver Definition" width="300" height="40" /></a><p class="wp-caption-text">Figura 13. Detalhe da localização do ícone New Driver Definition</p></div>
<p>Na caixa de diálogo <strong>New Driver Definition</strong>, você possui três abas:</p>
<p><strong>Name/Type</strong> – Aqui definimos qual a versão do driver JDBC iremos usar. Neste caso, <strong>MySQL JDBC Driver</strong>.</p>
<div id="attachment_58" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-58" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-1.jpg" rel="lightbox[37]"><img class="size-medium wp-image-58" title="Figura 13-1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-1-300x243.jpg" alt="Selecionando o driver JDBC do MySQL" width="300" height="243" /></a><p class="wp-caption-text">Figura 14. Selecionando o driver JDBC do MySQL</p></div>
<p><strong>Jar List</strong> – O local onde se encontra o arquivo JAR. Neste caso, remova o atual, clicando em <strong>Remove JAR/Zip</strong> e adicione o que foi baixado em <strong>Add JAR/Zip</strong>.</p>
<div id="attachment_59" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-59" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-2.jpg" rel="lightbox[37]"><img class="size-medium wp-image-59" title="Figura 13-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-2-300x155.jpg" alt="Adicionando o path para o arquivo JDBC do MySQL" width="300" height="155" /></a><p class="wp-caption-text">Figura 15. Adicionando o path para o arquivo JDBC do MySQL</p></div>
<p><strong>Properties</strong> – Podemos configurar a conexão ao banco de dados. Coloque os dados do seu banco de dados utilizado no exemplo deste artigo.</p>
<div id="attachment_60" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-60" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-3.jpg" rel="lightbox[37]"><img class="size-medium wp-image-60" title="Figura 13-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-13-3-300x233.jpg" alt="Propriedades da conexão ao banco de dados do exemplo" width="300" height="233" /></a><p class="wp-caption-text">Figura 16. Propriedades da conexão ao banco de dados do exemplo</p></div>
<p>Após configurar o seu driver e conexão com o banco de dados, confirme no botão <strong>OK</strong>.</p>
<p>Retornando ao diálogo <strong>New Connection Profile</strong>, agora com as configurações do seu banco de dados preenchidas, marque <strong>Save password</strong>.</p>
<div id="attachment_61" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-61" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-14.jpg" rel="lightbox[37]"><img class="size-medium wp-image-61" title="Figura 14" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-14-300x183.jpg" alt="Dados para a conexão preenchidos" width="300" height="183" /></a><p class="wp-caption-text">Figura 17. Dados para a conexão preenchidos</p></div>
<p>Clique no botão <strong>Test Connection</strong> e, se estiver com tudo funcionando perfeitamente, verá uma mensagem de sucesso.</p>
<div id="attachment_62" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-62" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-15.jpg" rel="lightbox[37]"><img class="size-medium wp-image-62" title="Figura 15" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-15-300x92.jpg" alt="Conexão executada com sucesso" width="300" height="92" /></a><p class="wp-caption-text">Figura 18. Conexão executada com sucesso</p></div>
<p>Terminadas estas configurações, seu perfil de conexão está pronto. Pode finalizar o diálogo clicando em <strong>Finish</strong>.</p>
<div id="attachment_63" class="wp-caption alignnone" style="width: 262px"><a rel="attachment wp-att-63" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-16.jpg" rel="lightbox[37]"><img class="size-medium wp-image-63" title="Figura 16" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-16-252x300.jpg" alt="Caixa de diálogo New Connection Profile com dados da conexão" width="252" height="300" /></a><p class="wp-caption-text">Figura 19. Caixa de diálogo New Connection Profile com dados da conexão</p></div>
<p>Retornando a criação do projeto, em <strong>New JPA Project</strong>, agora você possui todas as informações necessárias para criar o projeto JPA. Clique no botão <strong>Finish</strong> para gerar o projeto.</p>
<div id="attachment_64" class="wp-caption alignnone" style="width: 257px"><a rel="attachment wp-att-64" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-17.jpg" rel="lightbox[37]"><img class="size-medium wp-image-64" title="Figura 17" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-17-247x300.jpg" alt="Etapa final do diálogo New JPA Project com tudo preenchido" width="247" height="300" /></a><p class="wp-caption-text">Figura 20. Etapa final do diálogo New JPA Project com tudo preenchido</p></div>
<p>O Eclipse desejará colocar a perspectiva associada ao tipo de projeto. Basta confirmar em <strong>Yes</strong>.</p>
<div id="attachment_65" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-65" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-18.jpg" rel="lightbox[37]"><img class="size-medium wp-image-65" title="Figura 18" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-18-300x146.jpg" alt="Autorizando a mudança de perspectiva" width="300" height="146" /></a><p class="wp-caption-text">Figura 21. Autorizando a mudança de perspectiva</p></div>
<p>O projeto gerado é mostrado na <strong>Figura</strong> a seguir:</p>
<div id="attachment_67" class="wp-caption alignnone" style="width: 294px"><a rel="attachment wp-att-67" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19.jpg" rel="lightbox[37]"><img class="size-full wp-image-67" title="Figura 19" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19.jpg" alt="Projeto JPA gerado" width="284" height="225" /></a><p class="wp-caption-text">Figura 22. Projeto JPA gerado</p></div>
<h3>Adicionando a biblioteca JDBC no projeto</h3>
<p>Embora, para configurar o projeto JPA, você criou uma conexão com o MySQL, esta apenas funciona no Eclipse IDE. Para adicionar no seu projeto a biblioteca JDBC, clique com o direito do mouse sobre ele e selecione <strong>Properties</strong> no menu de contexto.</p>
<p>Na caixa de diálogo <strong>Properties</strong>, vá em <strong>Java Build Path</strong>, na aba <strong>Libraries</strong> e clique em <strong>Add Library</strong>.</p>
<div id="attachment_66" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-66" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-1.jpg" rel="lightbox[37]"><img class="size-medium wp-image-66" title="Figura 19-1" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-1-300x212.jpg" alt="Caixa de diálogo Properties, em Java Build Path, na aba Libraries " width="300" height="212" /></a><p class="wp-caption-text">Figura 23. Caixa de diálogo Properties, em Java Build Path, na aba Libraries </p></div>
<p>Na caixa de diálogo <strong>Add Library</strong>, selecione <strong>Connectivity Driver Definition</strong> e clique no botão <strong>Next</strong>.</p>
<div id="attachment_68" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-68" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-2.jpg" rel="lightbox[37]"><img class="size-medium wp-image-68" title="Figura 19-2" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-2-300x264.jpg" alt="Caixa de diálogo Add Library, em Connectivity Driver Definition" width="300" height="264" /></a><p class="wp-caption-text">Figura 24. Caixa de diálogo Add Library, em Connectivity Driver Definition</p></div>
<p>Na segunda etapa, selecione a configuração do MySQL que fez para o Eclipse, em <strong>Available Driver Definitions</strong> e confirme no botão <strong>Finish</strong>.</p>
<div id="attachment_69" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-69" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-3.jpg" rel="lightbox[37]"><img class="size-medium wp-image-69" title="Figura 19-3" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-3-300x264.jpg" alt="Seleção da configuração do MySQL em Available Driver Definitions" width="300" height="264" /></a><p class="wp-caption-text">Figura 25. Seleção da configuração do MySQL em Available Driver Definitions</p></div>
<p>Agora você possui a biblioteca JDBC também em seu projeto. Agora confirme a caixa de diálogo e seu projeto estará pronto para trabalhar com a JPA 2.0.</p>
<div id="attachment_70" class="wp-caption alignnone" style="width: 310px"><a rel="attachment wp-att-70" href="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-4.jpg" rel="lightbox[37]"><img class="size-medium wp-image-70" title="Figura 19-4" src="http://www.edsongoncalves.com.br/wp-content/uploads/2010/01/Figura-19-4-300x226.jpg" alt="Detalhe da biblioteca JDBC do MySQL adicionada ao projeto" width="300" height="226" /></a><p class="wp-caption-text">Figura 26. Detalhe da biblioteca JDBC do MySQL adicionada ao projeto</p></div>
<p>Em <a href="http://www.edsongoncalves.com.br/2010/02/03/jpa-2-0-na-pratica-parte-2/"><strong>JPA 2.0 na Prática &#8211; Parte 2</strong></a>, vocês verão como configurar, criar entidades e executar operações em JPA que serão refletidas no banco de dados do MySQL.</p>
<p>Bons Códigos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edsongoncalves.com.br/2010/01/25/jpa-2-0-na-pratica-parte-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

