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()
相同。
我使用的是 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()
相同。