Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister
Solution 1
You need to specifically add the entity classes in the configuration. By default it loads the classes but do not initialize the entity classes. For that configuration.addAnnotatedClass() or addResource will solve this out.
Solution 2
replace your code
"ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();"
from SessionFactory to
"ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( configuration.getProperties()). buildServiceRegistry();"
and try to make your sessionfactory and serviceRegistry static in class
May it works for you.
Solution 3
//I am using Hib5,I have created SF like this and it is working
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(standardRegistry).getMetadataBuilder().build();
sessionFactory = metadata.getSessionFactoryBuilder().build();
}
return sessionFactory;
}
Comments
-
vineeshchauhan almost 2 years
I have to ask it, I almost tried everything.
Entity Class
@Entity @Table(name="UserInfo") public class User { @Id@Column(name="user_name") private String userName; @Column(name="user_id") private Integer userId; }
<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=BankingApplication</property> <property name="hibernate.connection.username">sa</property> <property name="hibernate.connection.password">2OmniWay</property> <!-- org.hibernate.HibernateException: No CurrentSessionContext configured! --> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.default_schema">dbo</property> <!-- Mapping with model class containing annotations --> <mapping class="pojo.User"/> </session-factory> </hibernate-configuration>
SeesionFactory
// Create the SessionFactory from hibernate.cfg.xml Configuration configuration = new Configuration(); configuration.configure("hibernate-annotation.cfg.xml"); System.out.println("Hibernate Annotation Configuration loaded"); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). applySettings(configuration.getProperties()).build(); System.out.println("Hibernate Annotation serviceRegistry created"); SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); return sessionFactory;
Getting Object saved in DB
SessionFactory sessionFactory = HibernateUtil.getSessionAnnotationFactory(); Session session = sessionFactory.openSession(); Account account = null; try{ account = (Account) session.get(Account.class, id);
I am getting exception mentioned in subject. I just tripled checked everything but it is just not working.
Any suggestion would be helpful.
___________Stack Trace_________
Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister: pojo.User at org.hibernate.internal.SessionFactoryImpl.locateEntityPersister(SessionFactoryImpl.java:792) at org.hibernate.internal.SessionImpl.locateEntityPersister(SessionImpl.java:2652) at org.hibernate.internal.SessionImpl.access$2500(SessionImpl.java:164) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2590) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.<init>(SessionImpl.java:2577) at org.hibernate.internal.SessionImpl.byId(SessionImpl.java:1044) at org.hibernate.internal.SessionImpl.get(SessionImpl.java:955) at business.ManageAccount.getAccountDetails(ManageAccount.java:18) at Utils.TestConnecttion.main(TestConnecttion.java:16)
-
vineeshchauhan over 8 yearsIt is automatically loaded. I can see it in logs. something is wrong somewhere else.
-
vineeshchauhan over 8 yearsIt is compile time exception. addAnnotatedClass is method of configuration object.
-
vineeshchauhan over 8 yearsI have also added but no success.
-
vineeshchauhan over 8 yearsI have added configuration.addAnnotatedClass(Account.class); line after configuration.configure("hibernate-annotation.cfg.xml"); and it works. But I want to know why it is not picking mappings from cfg.xml files ?
-
suman tipparapu over 8 yearsyou added only User.java to cfg.xml file ,what about other Entities?
-
vineeshchauhan over 8 yearsI have added all entities in cfg.xml. Hibernate is not picking any of them, be it User or Account. I have shown cfg.xml as short as possible. I want Hibernate to pick mapping from cfg.xml not from solution provided above. any view ?
-
Abdelhak over 8 years@vineeshchauhan see the answer
-
vineeshchauhan over 8 yearsby using addAnnotatedClass, it is working. But it is not good design if I have to specify each entity while creating SessionFactory. I want this to be part of configuration. idea ??
-
vineeshchauhan over 8 yearspublic class User implements Serializable{ } - Good catch but no impact.
-
Kandy over 8 yearswhat version of hibernate you are using
-
KayV over 8 yearsFor that you need you create .hbm for every entity and configure that hbm file with hibernate.cfg.xml. I think this is the only way to make it a part of configuration.
-
Abdelhak over 8 years@youshchauhan if are you reach a answer canyou share with us thank you so much