• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Atualização da versão Hibernate – Modificação de como obter a SessionFactory

March 22, 2021 by Mauda Leave a Comment

Conteúdo do Post:
  1. Contexto
  2. Utilizando a org.hibernate.boot.registry.StandardServiceRegistry
  3. 1. Obter uma instância de org.hibernate.boot.registry.StandardServiceRegistry
  4. 2. Criar os MetadataSources e o Metadata
  5. 3. Criar a SessionFactory
  6. finally{

Olá Pessoal, tudo bem?

Continuando ainda nos problemas que ocorreram no projeto SeminariosCientificos devido a atualização do Hibernate, chegamos em um ponto interessante sobre a modificação na forma de se obter a SessionFactory. Veja na continuação deste artigo.

Contexto

Para começarmos essa atualização, vamos nos basear no artigo sobre Hibernate 4 – Criação da SessionFactory e obtem a Session. Nesse artigo a SessionFactory era obtida da seguinte forma:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package br.com.mauda.seminario.cientificos.dao.util;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
 
/**
* @author Mauda
*
*/
public class HibernateUtil {
 
    private static SessionFactory sessionFactory = getSessionFactory();
 
    private static SessionFactory getSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
            .applySettings(configuration.getProperties()).buildServiceRegistry();
        return configuration.buildSessionFactory(serviceRegistry);
    }
 
    public static Session getSession() {
        return sessionFactory.openSession();
    }
}

 

Com a atualização do Hibernate, essa forma de atualização não funciona mais. Então chegou a hora de ajustar esse ponto do projeto.

Utilizando a org.hibernate.boot.registry.StandardServiceRegistry

Agora para obter a instancia de SessionFactory é necessário os seguintes passos:

  1. Obter uma instância de org.hibernate.boot.registry.StandardServiceRegistry
  2. Criar os MetadataSources e o Metadata
  3. Criar a SessionFactory

 

1. Obter uma instância de org.hibernate.boot.registry.StandardServiceRegistry

Para realizar uma instância de org.hibernate.boot.registry.StandardServiceRegistry, precisaremos utilizar da classe StandardServiceRegistryBuilder, que irá ler o arquivo hibernate.cfg.xml para obter as informações. Além disso, todo o conteúdo que estava dentro do método getSessionFactory foi deletado, assim como seus imports. O código abaixo mostra essa alteração grande:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package br.com.mauda.seminario.cientificos.dao.util;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 
/**
* @author Mauda
*
*/
public class HibernateUtil {
 
    private static SessionFactory sessionFactory = getSessionFactory();
 
    private static SessionFactory getSessionFactory() {
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
    }
 
    public static Session getSession() {
        return sessionFactory.openSession();
    }
}

 

2. Criar os MetadataSources e o Metadata

Próximo passo é obter as instâncias de MetadataSources e Metadata, com o registry e o MetadataBuilder. Veja no código:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package br.com.mauda.seminario.cientificos.dao.util;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
 
/**
* @author Mauda
*
*/
public class HibernateUtil {
 
    private static SessionFactory sessionFactory = getSessionFactory();
 
    private static SessionFactory getSessionFactory() {
        // Creating a registry
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
 
        // Create the MetadataSources
        MetadataSources sources = new MetadataSources(registry);
 
        // Create the Metadata
        Metadata metadata = sources.getMetadataBuilder().build();
    }
 
    public static Session getSession() {
        return sessionFactory.openSession();
    }
}

 

3. Criar a SessionFactory

Agora chegou o ponto de obter uma instância de SessionFactory, para isso utilizaremos a instância de metadata que obtivemos no ponto anterior. Veja no código abaixo:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package br.com.mauda.seminario.cientificos.dao.util;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 
/**
* @author Mauda
*
*/
public class HibernateUtil {
 
    private static SessionFactory sessionFactory = getSessionFactory();
 
    private static SessionFactory getSessionFactory() {
        // Creating a registry
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
 
        // Create the MetadataSources
        MetadataSources sources = new MetadataSources(registry);
 
        // Create the Metadata
        Metadata metadata = sources.getMetadataBuilder().build();
 
        // Create SessionFactory
        return metadata.getSessionFactoryBuilder().build();
    }
 
    public static Session getSession() {
        return sessionFactory.openSession();
    }
}

 

Por fim, o método getSession permanece igual, não tendo a necessidade de modificação.

finally{

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Hibernate, Java, JPA Tagged With: Hibernate, Java, Session, SessionFactory

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in