Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Hibernate 5 :- org.hibernate.MappingException:entidade desconhecida


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.