UnknownEntityTypeException: Unable to locate persister (Hibernate 5.0)
Solution 1
Don't use Configuration with StandardServiceRegistryBuilder, Configuration is considered deprecated, but instead make the bootstrapping as mentioned in the hibernate 5 documentation, I had the same problem and this fixed it.
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();
for further details , check the documentation
Solution 2
Try adding configure()
method at the end.
StandardServiceRegistryBuilder registryBuilder = new
StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).configure();
Mohammad Faisal
@faisal6621 facebook linkedin Er. Mohammad Faisal (Blogger) Er. Mohammad Faisal (Wordpress) If you are looking for something to vote on, I'm looking for votes (ideally upvotes 🤪) on [my questions/answers with zero][1]...
Updated on June 04, 2022Comments
-
Mohammad Faisal almost 2 years
In the code below when I try to execute
Main.java
I am getting 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.<init>(SessionImpl.java:2575) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(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)
but if I do uncomment
cfg.addClass( Users.class ).addResource( "com/np/vta/test/pojo/Users.hbm.xml" );
then the code works fine.Why it is not reading the
<mapping>
fromhibernate.cfg.xml
?
Project setup
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">root@123321</property> <property name="hibernate.connection.url">jdbc:mysql://192.168.1.90:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <mapping resource="com/np/vta/test/pojo/Users.hbm.xml" class="com.np.vta.test.pojo.Users" /> </session-factory> </hibernate-configuration>
Users.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 24 Aug, 2015 3:57:45 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.np.vta.test.pojo.Users" table="tomcat_users"> <id name="userName" type="java.lang.String"> <column name="user_name" /> <generator class="assigned" /> </id> <property name="password" type="java.lang.String"> <column name="password" /> </property> </class> </hibernate-mapping>
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 ); } }