Hibernate 5.0.7 配置:未加载实体

Hibernate 5.0.7 Configuration: entity not loaded

我使用的是 Hibernate 5.0.7,但我遇到了注释配置问题。

这是我的 hibernate.cfg.xml 文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration>
<session-factory>

    <property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=mydb</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password">sa</property>

    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.show_sql">true</property>

    <mapping class="com.domain.Person"/>

</session-factory>

我是这样配置会话工厂的:

    Configuration configuration = new Configuration();
    configuration.configure("hibernate.cfg.xml");

    ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

    SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    return sessionFactory;

当我尝试对 Person class 执行查询时,我得到了一个空列表。我发现 class Person 没有在会话工厂中正确加载(sessionFactory.getAllClassMetadata() returns 空列表),唯一的方法是手动添加 class:

 configuration.addAnnotatedClass(Person.class);

我该如何解决?

您的会话工厂配置是 incorrect for Hibernate 5。 当您执行 configuration.buildSessionFactory(serviceRegistry) 时,Configuration 丢失了有关通过调用 configuration.configure("hibernate.cfg.xml") 获取的映射的所有信息。

如果你使用Hibernate 5,你可以通过这种方式创建会话工厂

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

您不需要将 hibernate.cfg.xml 传递给 configure() 方法,因为默认使用此名称,因此 configure("hibernate.cfg.xml")configure() 相同。