Vous êtes sur la page 1sur 8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade

imasters.com.br > Portal Fruns 7Masters Revista Cursosonline MacMagazine ClubedoAssinante


/DESIGN

/DESENVOLVIMENTO

/BANCODEDADOS

Eventos:

/MKTDIGITAL

PHPExperience

InterCon

/INFRA

DevCommerce

JPA2.0naprtica:conhecendo
asanotaesemumaEntidade
EdsonGonalvesemJava
quintafeira,15deabrilde2010

SHARES

Ol, pessoal! Continuaremos a falar hoje sobre a Java

A+ A

Persistence API 2.0 (JPA 2.0). Hoje veremos como conhecer anotaes
em uma entidade.
Como pudemos perceber no artigo JPA
2.0naPrticacomHibernate3.5, as entidades representam as
tabelas encontradas no banco de dados. Entretanto, nem sempre
refletiro
exatamente o modelo da entidade relacional encontrado no banco de
dados
mas, com certeza, so suas representaes, s que em formato de
objetos
o que chamamos de O/R
(Object-to-Relational).

Anotando uma classe simples


Entidades so classes Java Simples (POJOs) na JPA. Ao fazer a
Entidade Bean Categoria, no artigo anterior, adicionamos anotaes que
representavam certas caractersticas que deveriam ser refletidas na
entidade relacional, como nome da tabela e o campo de chave primria.
A entidade Categoria simples e possui atributos privados que so
refletidos, tais como escritos na entidade, em seu equivalente, na
tabela da entidade relacional.
http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

1/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade

A classe Categoria tambm formada por mtodos pblicos getters e


setters, tais como so os JavaBeans comuns.
Para que uma classe, como no caso da Categoria criada, no seja
considerada um simples JavaBean e sim uma Entidade Bean da Java
Persistence, precisamos de duas anotaes bsicas:
javax.persistence.Entity Informa
que classe uma Entidade.
javax.persistence.Id Informa o atributo na classe
que ser utilizado como chave primria.
Na ausncia das demais anotaes, o nome da tabela e das colunas
existentes na entidade relacional, do banco de dados, so tidos pelo
provedor de persistncia como sendo exatamente iguais aos encontrados
na
Entidade Bean.
Desta forma, se mapearmos uma entidade bean como na Listagem1,
teremos uma tabela no banco de dados, procurada ou criada pelo
provedor
de persistncia similar ao da Listagem2.
Listagem1EntidadeBeanCategoria

packagebr.com.integrator
importjava.io.Serializable
importjava.lang.*
importjavax.persistence.*
@Entity
publicclassCategoriaimplementsSerializable{
@Id
privateLongid
privateStringcategoria
http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

NEWSLETTER
Fiquepordentrodetodasasnovidades,eventos,
cursosemuitomais

2/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade
cursosemuitomais

privateStringdescricao

seunome
seuemail

//gettersesettersomitidos

ENVIAR

}
Listagem2AtabelaCategorianobancodedadosMySQL

createtableCategoria(
idbigint(20)primarykeynotnull,
categoriavarchar(255),
descricaovarchar(255)
)

Anotaes @Table, @Column e @Id


Se necessitarmos definir o nome de uma tabela, como foi feito em no
artigoanterior, utilizamos a notao @Table,
de javax.persistence.Table. O mesmo tambm pode ser
feito para dar nomes a colunas, utilizando a anotao @Column,
de javax.persistence.Column. Desta forma, se fizermos a
modificao na classe Categoria, como na Listagem
3, teremos o resultado mostrado na Figura1.
Listagem3Utilizandoasanotaes@Tablee@Column

@Entity
@Table(name="categorias")
publicclassCategoriaimplementsSerializable{
@Id

@Column(name="categoria_id",nullable=false,columnDefinition="i
privateLongid
@Column(name="categoria_nome",length=30,nullable=false)
privateStringcategoria
@Column(columnDefinition="text")
http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

3/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade

privateStringdescricao
//gettersesettersomitidos
}

Figura 1 Anotaes da Entidade Categoria


refletida na tabela categorias no banco de dados
A Listagem3 exibe os atributos contidos na anotao
@Column, que so teis no mapeamento de uma tabela
equivalente no banco de dados. Temos os seguintes atributos utilizados
no exemplo:
name Nome da coluna na tabela do banco de dados,
recebe como valor uma String;
columnDefinition Recebe uma String com o tipo que
ser usado pela coluna equivalente na tabela do banco de dados. Um
exemplo a coluna descricao que possui columnDefinition
como text.
length Alguns tipos de colunas nas tabelas dos
bancos de dados possuem um valor varivel de largura do campo. Um
exemplo so os campos varchar(). No MySQL, se no
definirmos um valor de largura para o tipo varchar,
este criado em seu tamanho mximo de caracteres, que no caso 255.
Cada banco de dados possui um limite mximo em seu determinado tipo.
nullable Recebe um valor booleano cujo padro true,
caso no declarado. Se false, este campo
obrigatrio.
A anotao @Id, mostrada pela primeira vez em nooutroartigo, possui
uma anotao dependente,
chamada de @javax.persistence.GeneratedValue. Essa
anotao utilizada quando desejamos que o provedor de persistncia
gere as chaves para ns.
http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

4/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade

A anotao @GeneratedValue possui um atributo


chamado strategy, que define a estratgia de gerao de
valores incrementados. A estratgia mais comum
javax.persistence.GeneratorType.AUTO,
mas no exemplo visto antes, utilizamos
javax.persistence.GeneratorType.
IDENTITY.
Entretanto, alguns gerenciadores de banco de dados, como Oracle,
possuem uma estrutura predefinida para gerar valores seqenciais.
Nesses
casos, utilizamos a anotao
@javax.persistence.SequenceGenerator.
A Listagem4 exibe esta anotao utilizada em um banco
de dados ORACLE.
Listagem4Utilizandoaanotao@SequenceGenerator

@Entity
@Table(name="CATEGORIAS_TABLE")

@SequenceGenerator(name="CATEGORIA_SEQUENCE",sequence
publicclassCategoriaimplementsSerializable{
@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE,generator=
privateLongid
@Column(length=30,nullable=false)
privateStringcategoria
@Column(length=3500)
privateStringdescricao
//gettersesettersomitidos
}
http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

5/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade

A anotao @SequenceGenerator possui um atributo name


do qual referenciado em @GeneratedValue, atravs do
atributo generator. A anotao @GeneratedValue
tambm precisa utilizar, no atributo strategy, o valor
GenerationType.SEQUENCE.
O nome da sequence gerada no Oracle, por exemplo,
seria a colocada no atributo sequenceName, de
@SequenceGenerator.
Tambm, em @SequenceGenerator, temos os atributos initialValue
e allocationSize e, sem ele, o Oracle, por exemplo, usando o
Hibernate como provedor JPA, criar uma sequence
com valor de 50 em 50. O resultado de
uma sequence criada no banco de dados Oracle, com estas
informaes fornecidas pela entidade, atravs da JPA, pode ser vista na
Figura2.

Figura 2 Sequncia gerada no Oracle XE e


visualizada pelo Browser de Objetos
Ateno: A forma como adicionamos a anotao
@javax.persistence.Id
na Entidade determina como podemos declarar as demais anotaes no
Bean. Se colocarmos a anotao @Id nos atributos, as
demais precisam estar nos atributos. Se colocarmos no mtodo getter,
as demais precisaro estar nos mtodos getters.
Ficamos por aqui. At a prxima!
EdsonGonalvesemJava
quintafeira,15deabrilde2010

http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

6/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade

SHARES

leiaagora

Criandoumcomponentede
paginaoParte02

FabielPrestes
emDesenvolvimento

DSuaOpinio
Oseuendereodeemailnoserpublicado.Camposobrigatriossomarcadoscom*

Nome

Email

ENVIAR

2comentriosemJPA2.0naprtica:conhecendoasanotaesemuma
Entidade
SinvaldoJunior
17denovembrode2011s13:23

Parabnspelopost,bemdidticoeobjetivo,muitobom!
RESPONDER

iltonbarbosa
29deagostode2013s15:37

Oi,noestouconseguindoencontrarumasoluoparaatributosdotipoboolean,queestejamvaziosnobancodedados.
Nullvaluewasassignedtoapropertyofprimitivetypesetterof
RESPONDER

http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

7/8

24/04/2016

JPA2.0naprtica:conhecendoasanotaesemumaEntidade
Este projeto mantido e patrocinado pelas empresas:

Hospedado por:

Desenvolvimento

Design

Bancodedados

MarketingDigital

Agenda

CursosOnline

Agile

3dsmax

Interbase

ContedoDigital

Ajax

Acessibilidade

MongoDB

Ecommerce

Frum

InterCon

AnlisedeDados

Arquiteturade
Informao

MySQL

EmailMarketing

7Masters

RevistaiMasters

Oracle

Mercado

PostgreSQL

PublicidadeOnline

SQLServer

RedesSociais

CakePHP
CSS
FrontEnd
HTML
Java

DesignResponsivo
Games
Usabilidade
UserExperience

Tendncias
InfraeCloud

JavaScript
PHP

CloudComputing
Linux

Mobile

Python

MicrosoftAzure

iPhone&iPad

Ruby

Segurana

Android

SiteBlindado

SobreoiMasters

PolticadePrivacidade

Faleconosco

iMastersExpert(englishblog)

http://imasters.com.br/artigo/16562/java/jpa20napraticaconhecendoasanotacoesemumaentidade/

8/8

Vous aimerez peut-être aussi