Corrigi o mesmo problema com o Hibernate 5. Há um problema neste código
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Este código funciona bem para o Hibernate 4.3.5, mas o mesmo código tem o mesmo problema para o Hibernate 5.
Quando você faz
configuration.buildSessionFactory(sr)
, usando Hibernate 5, Configuration
perde todas as informações sobre mapeamento que são obtidas pela chamada configuration.configure()
. Solução
Para corrigir o problema, se você usar arquivos de configuração padrão
hibernate.cfg.xml
e hibernate.properties
, você pode criar a fábrica de sessões desta forma (sem ServiceRegistry
) SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Carregando propriedades
Se você tiver propriedades em um arquivo diferente de
hibernate.properties
, você pode criar uma fábrica de sessões usando StandardServiceRegistryBuilder
(de qualquer forma, se você tiver hibernate.properties
e outro arquivo, ele será carregado ambos) Para carregar propriedades como um recurso
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Você precisa ter
hibernate-h2.properties
no caminho da classe (raiz da pasta de fontes, pasta de recursos). Você também pode especificar um caminho da pasta de origem raiz/com/github/xxx/model/hibernate-h2.properties
. Para carregar propriedades de um caminho no sistema de arquivos
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Você pode encontrar um exemplo de aplicativo de console usando esta abordagem aqui fluent-hibernate-mysql . Ele usa uma classe de utilitário para construir a fábrica de sessões da biblioteca fluente-hibernate .
Tutorial incorreto do Hibernate 5
Há um exemplo incorreto no tutorial do Hibernate 5 1.1.6. Inicialização e ajudantes . Ele usa este código
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Não faz uma configuração adequada.