UnknownEntityTypeException:无法找到persister(Hibernate 5.0)

在下面的代码中,当我尝试执行Main.java我得到exception:

 Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister: com.np.vta.test.pojo.Users at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792) at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2637) at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.(SessionImpl.java:2575) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.(SessionImpl.java:2562) at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044) at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) at com.app.test.Main.main(Main.java:20) 

但如果我取消注释cfg.addClass( Users.class ).addResource( "com/np/vta/test/pojo/Users.hbm.xml" ); 然后代码工作正常。

为什么不从hibernate.cfg.xml读取


项目设置

项目设置eclipse


的hibernate.cfg.xml

     com.mysql.jdbc.Driver root@123321 jdbc:mysql://192.168.1.90:3306/test root org.hibernate.dialect.MySQLDialect    

Users.hbm.xml

               

Users.java

 package com.np.vta.test.pojo; import java.io.Serializable; public class Users implements Serializable { private static final long serialVersionUID = 7855937172997134350L; private String userName; private String password; public Users() { } // getter and setters } 

Main.java

 package com.app.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import com.np.vta.test.pojo.Users; public class Main { public static void main( String[] args ) { Configuration cfg = new Configuration(); cfg.configure( "hibernate.cfg.xml" ); // cfg.addClass( Users.class ).addResource( "com/np/vta/test/pojo/Users.hbm.xml" ); StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder().applySettings( cfg.getProperties() ); SessionFactory sessionFactory = cfg.buildSessionFactory( registryBuilder.build() ); Session session = sessionFactory.openSession(); Users users = session.get( Users.class, "anand" ); System.out.println( users ); } } 

不要使用Configuration with StandardServiceRegistryBuilder,配置被认为已弃用,而是按照hibernate 5文档中的说明进行引导,我遇到了同样的问题并修复了它。

 StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder() .configure( "org/hibernate/example/MyCfg.xml" ) .build(); Metadata metadata = new MetadataSources( standardRegistry ) .addAnnotatedClass( MyEntity.class ) .addAnnotatedClassName( "org.hibernate.example.Customer" ) .addResource( "org/hibernate/example/Order.hbm.xml" ) .addResource( "org/hibernate/example/Product.orm.xml" ) .getMetadataBuilder() .applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE ) .build(); SessionFactory sessionFactory = metadata.getSessionFactoryBuilder() .applyBeanManager( getBeanManagerFromSomewhere() ) .build(); 

有关详细信息,请查看文档