Exception in thread "main" org.hibernate.UnknownEntityTypeException: Unable to locate persister

19,678

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;
    }
Share:
19,678
vineeshchauhan
Author by

vineeshchauhan

Java Junior

Updated on July 27, 2022

Comments

  • vineeshchauhan
    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.enter image description here

    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
    vineeshchauhan over 8 years
    It is automatically loaded. I can see it in logs. something is wrong somewhere else.
  • vineeshchauhan
    vineeshchauhan over 8 years
    It is compile time exception. addAnnotatedClass is method of configuration object.
  • vineeshchauhan
    vineeshchauhan over 8 years
    I have also added but no success.
  • vineeshchauhan
    vineeshchauhan over 8 years
    I 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
    suman tipparapu over 8 years
    you added only User.java to cfg.xml file ,what about other Entities?
  • vineeshchauhan
    vineeshchauhan over 8 years
    I 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
    Abdelhak over 8 years
    @vineeshchauhan see the answer
  • vineeshchauhan
    vineeshchauhan over 8 years
    by 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
    vineeshchauhan over 8 years
    public class User implements Serializable{ } - Good catch but no impact.
  • Kandy
    Kandy over 8 years
    what version of hibernate you are using
  • KayV
    KayV over 8 years
    For 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
    Abdelhak over 8 years
    @youshchauhan if are you reach a answer canyou share with us thank you so much