You are on page 1of 5

29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos

Buscar

favorito marcarcomolido dvidas?

Hibernate: Persistindo datas no Java sem


incompatibilidade de tipos
Veja neste artigo como utilizar a API de datas do Java 8 com o Hibernate sem problemas de mapeamento.

(1) (0) #ShowMeTheCode

Motivao

ComolanamentodaAPIDateandTime,cujoobjetivoprincipalsimplificaramanipulaodedatas,umpequenoproblemasurgiu:os

novostiposdedadosnoeramcompletamentesuportadospelaespecificaodaJPA2.1.Dessaforma,classescomoLocalDatepodem

serutilizadascomoatributodeumaentidade,masdevidoincompatibilidade,nopossvelanotaressesatributoscom@Temporale

armazenlosnobancodedados.

ComoolanamentodoJPA2.2aindanoocorreu(atomomentodapublicaodesseartigo),umadasimplementaesdaJPAcriouuma

soluoprpria.OHibernate5tornoupossvelomapeamentodeclassesdaAPIdedatasdoJava8comostiposJDBC.AFigura1mostra

omapeamentocriadoentreosnovostiposdopacotejava.timeeostiposJDBC.

Mapeamentodetiposdajava.timeedoJDBC

Figura1.Mapeamentodetiposdajava.timeedoJDBC

Nesseartigo,veremoscomoutilizaraAPIdedatasdoJava8juntamentecomoHibernate5.

Passo 1: Criar o projeto

Paraoexemploquedesenvolveremosaqui,vamosutilizaroMySQL5.7.11,oNetBeans8.2e,comeles,criaremosumaaplicao

exemplosimples,contendoapenasumaentidade,chamadaOrdem,cujoscriptSQLparacriaonobancodedadosapresentado

naListagem1.

CREATETABLEordem(
01ordemIdbigint(20)NOTNULLAUTO_INCREMENT,
02OrdemProductvarchar(255)DEFAULTNULL,
03ordemCreatedtimestampNULLDEFAULTNULL,
04ordemDatedateDEFAULTNULL,
05ordemTimetimeDEFAULTNULL,
06ordemStarttimestamp,
07ordemEndtimestamp, Guia Hibernate +

http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 1/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos
08ordemTimeExecutedbigint(20),
09ordemTimeZonedTimetimestamp,
10PRIMARYKEY(ordemId));

Listagem1.ScriptparacriaodatabelaOrdem

Apscriarobancodedados,crieumnovoprojetoJava,chamadohibernatetime,eadicioneasbibliotecasreferentesaoHibernate

Coreemseuclasspath.AversodoHibernatequefaremosusoa5.2.6.Final,amaisrecentenomomentodaescritadesse

material.

Passo 2: Mapear as classes do domnio da aplicao

Paradefiniromapeamentoobjeto/relacionaldaentidadedodomniodaaplicao,adicioneaoprojetoumanovaclassechamada

Ordem,cujocdigopodeservistonaListagem2.

01//importsomitidos
02
03@Entity
04@Table(name="ordem")
05publicclassOrdem{
06
07@Id
08@GeneratedValue(strategy=GenerationType.IDENTITY)
09privateLongordemId;
10
11privateStringOrdemProduct;
12privateLocalDateordemDate;
13privateLocalTimeordemTime;
14privateLocalDateTimeordemCreated;
15privateZonedDateTimeordemTimeZonedTime;
16privateInstantordemStart;
17privateInstantordemEnd;
18privateDurationordemTimeExecuted;
19
20//construtoresemtodosgetsesetsomitidos
21}
Listagem2.CdigodaclasseOrdem

Nesseexemplo,fizemosusodosnovostiposdaAPIJavaTimeparadefinirosatributosdaclasse. LocalTime , LocalDate e

LocalDateTime ,provavelmente,soasclassesmaisutilizadasaolidarcomessaAPI,erepresentam,respectivamente,umadata,um

horrioeosdoisjuntos.Aclasse ZonedDateTime representaumadataehoraemumfusohorrioespecfico.Jaclasse Instant ,diz

respeitoaumpontonotempocomaprecisodenanosegundos.Aclasse Duration ,porsuavez,geralmenteutilizainternamentea

classeanterioreserveparamedirumintervalodetempoemnanosegundos.

Asanotaespresentesnessaclasseso: @Entity e @Table ,queindicamqueosobjetosdessaclasseseropersistidosnobanco

dedadosalmde @GeneratedValue e @Id ,paracriaodeumachaveprimriaparaoobjeto.

Odestaqueaquificaparaaausnciadaanotao@Temporalnosdemaisatributos.OHibernate5teminformaessuficientespara

inferiromapeamentocorretodapropriedadedentrodobanco.Comisso,elel,porexemplo,otipo LocalDateTime e,corretamente,

insereodadonobancodedadoscomoum timestamp .

Passo 3: Congurar o acesso ao banco de dados

Agora,necessrioinformaraoHibernateondeestobancodedadoseasinformaesnecessriasparaseconectaraele.

Portanto,crieumarquivoXMLdenomehibernate.cfg,napastasrcdoprojeto,edefinaneleasconfiguraescomumenteutilizadas.
Guia Hibernate +
http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 2/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos

Opassoseguintecodificaraclasseutilitria HibernateUtil ,quefaraligaoentreoarquivoXMLeobancodedados,

disponibilizandoumainstnciade SessionFactory paraobterumobjetodesesso.AListagem3mostraaimplementaodessa

classe.

01//importsomitidos
02
03publicclassHibernateUtil{
04
05privatestaticSessionFactorysessionFactory;
06
07publicstaticSessionFactorygetSessionFactory(){
08if(sessionFactory==null){
09Configurationconfiguration=newConfiguration().configure();
10sessionFactory=configuration.buildSessionFactory();
11}
12returnsessionFactory;
13}
14}
Listagem3.CdigodaclasseHibernateUtil.

Passo 4: Criar a classe DAO

ComaclassedepersistnciamapeadacomasanotaesdoHibernate,oarquivodeconfiguraoeaconexocomobancode

dadosimplementados,partiremosparaacriaodoDAO, OrdemDAO, responsvelpordisponibilizarasoperaesdepersistncia.

SeucdigopodeservistonaListagem4.

01//importsomitidos...
02
03publicclassOrdemDAO{
04
05privatestaticSessionFactoryfactory;
06
07publicOrdemDAO(){
08factory=HibernateUtil.getSessionFactory();
09}
10
11publicvoidaddOrdem(Ordemordem){
12Sessionsession=factory.openSession();
13Transactiontx=null;
14Integercod_aluno=null;
15
16try{
17tx=session.beginTransaction();
18session.save(ordem);
19tx.commit();
20}
21catch(HibernateExceptione){
22if(tx!=null){
23tx.rollback();
24}
25e.printStackTrace();
26}finally{
27session.close();
28}
29}
Listagem4.CdigodaclasseOrdemDAO.

Linhas7a9:ObtemosumainstnciadasessoapartirdaclasseutilitriaHibernateUtil

Linhas11a29:DefinimosomtododeinserodeumobjetodotipoOrdemnobancodedados.

Passo 5: Testar a aplicao

Guia Hibernate +

http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 3/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos

Porfim,chegaomomentodetestaraaplicao.Aexecuodaclasse Main ,apresentadanaListagem5,permitevisualizaras

inseresnobancodedados.

Nalinha5criadoumobjetodotipoOrdemeemseguidaseusatributossopreenchidos.Esseobjetopersistidonobancode

dadosatravsdachamadaaomtodo addOrdem() ,daclasse OrdemDAO .

01//importsomitidos
02
03publicclassMain{
04publicstaticvoidmain(String[]args){
05Instantinicio=Instant.now();
06Ordemordem1=newOrdem();
07ordem1.setOrderProduct("InternetLink");
08ordem1.setOrderDate(LocalDate.now());
09ordem1.setOrdemTime(LocalTime.now());
10
11ZoneIdfusoHorario=ZoneId.of("America/Sao_Paulo");
12ZonedDateTimeagoraEmSaoPaulo=ZonedDateTime.now(fusoHorario);
13ordem1.setOrdemTimeZonedTime(agoraEmSaoPaulo);
14ordem1.setOrderCreated(LocalDateTime.now());
15ordem1.setOrdemStart(inicio);
16Instantfim=Instant.now();
17ordem1.setOrdemStart(fim);
18ordem1.setOrdemTimeExecuted(Duration.between(inicio,fim));
19OrdemDAOord=newOrdemDAO();
20ord.addOrdem(ordem1);
21}
21}
Listagem5.Implementaodaclassedeteste,Main.

AFigura2mostraavisodobancodedadosapsaexecuodaclassedeteste.Vejaqueosvaloresdefinidosforaminseridos

corretamentenobancodedados.

BancodedadosapsaexecuodaclasseMain

Figura2.BancodedadosapsaexecuodaclasseMain

OHibernate5,comovimos,simplificouotrabalhocomasclassesdaAPIdedatasdoJava8,evitandoanecessidadedeefetuar

vriasconversesafimdemanteracompatibilidadeentreostiposdedadosdosobjetosedobanco.

PublicadonoCanalJava


porCarlosAlberto
ExpertemJavaeprogramaoWeb

Ajudenosaevoluir:vocgostoudopost? (1) (0)

Compartilhe:

Publicadoem2017

Ficoucomalgumadvida?

Posteaquisuadvidaoucomentrioquenossaequiperesponderomaisrpidopossvel.

Guia Hibernate +

http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 4/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos

Maisposts
Microartigo

Guia de Referncia Carreira Programador Web Java


Guia

Guia de Referncia Spring Framework


Guia

Guia de Referncia Hibernate


Guia

Guia de Referncia Frameworks Java


Microartigo

Auditoria de dados com Hibernate Envers

Listar mais contedo

Publique | Assine | Faleconosco

DevMedia
134.541curtidas

CurtirPgina Cadastrese

HospedagemwebporPorta80WebHosting

Guia Hibernate +

http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 5/5

You might also like