Professional Documents
Culture Documents
Buscar
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.
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.
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
LocalDateTime ,provavelmente,soasclassesmaisutilizadasaolidarcomessaAPI,erepresentam,respectivamente,umadata,um
classeanterioreserveparamedirumintervalodetempoemnanosegundos.
Odestaqueaquificaparaaausnciadaanotao@Temporalnosdemaisatributos.OHibernate5teminformaessuficientespara
insereodadonobancodedadoscomoum timestamp .
Agora,necessrioinformaraoHibernateondeestobancodedadoseasinformaesnecessriasparaseconectaraele.
Portanto,crieumarquivoXMLdenomehibernate.cfg,napastasrcdoprojeto,edefinaneleasconfiguraescomumenteutilizadas.
Guia Hibernate +
http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 2/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos
classe.
01//importsomitidos
02
03publicclassHibernateUtil{
04
05privatestaticSessionFactorysessionFactory;
06
07publicstaticSessionFactorygetSessionFactory(){
08if(sessionFactory==null){
09Configurationconfiguration=newConfiguration().configure();
10sessionFactory=configuration.buildSessionFactory();
11}
12returnsessionFactory;
13}
14}
Listagem3.CdigodaclasseHibernateUtil.
ComaclassedepersistnciamapeadacomasanotaesdoHibernate,oarquivodeconfiguraoeaconexocomobancode
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.
Guia Hibernate +
http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 3/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos
inseresnobancodedados.
Nalinha5criadoumobjetodotipoOrdemeemseguidaseusatributossopreenchidos.Esseobjetopersistidonobancode
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
Compartilhe:
Publicadoem2017
Ficoucomalgumadvida?
Posteaquisuadvidaoucomentrioquenossaequiperesponderomaisrpidopossvel.
Guia Hibernate +
http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 4/5
29/01/2017 Hibernate:PersistindodatasnoJavasemincompatibilidadedetipos
Maisposts
Microartigo
DevMedia
134.541curtidas
CurtirPgina Cadastrese
HospedagemwebporPorta80WebHosting
Guia Hibernate +
http://www.devmedia.com.br/hibernatepersistindodatasnojavasemincompatibilidadedetipos/37816 5/5