Aravind Pillai
Aravind Pillai

Reputation: 771

Unable to Load Mapper Class in Hibernate

I'm very new to Hibernate. Followed by a youtube tutorial, I created a hibernate program but getting an error. Please find the Class and the error below. Solution for this will be highly grateful.

Error:

INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Oct 29, 2016 4:36:53 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Oct 29, 2016 4:36:53 AM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl useContextualLobCreation
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
Exception in thread "main" org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [Emp.hbm.xml]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:229)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.<init>(AnnotationMetadataSourceProcessorImpl.java:104)

Main Function()

public static void main( String[ ] args ) throws ParseException {

   Configuration cfg = new Configuration();
   cfg.configure("Hibernate.cfg.xml");
   SessionFactory sf = cfg.buildSessionFactory();
   Session s = sf.openSession();
   Transaction tx = s.beginTransaction();

  String name2 = "yahoo";

  LoginRegister lr = new LoginRegister();
  lr.set_username(name2.toLowerCase()+"_user");
  lr.set_password(name2.toLowerCase()+"_pass");
  lr.set_last_update(new java.sql.Date(new SimpleDateFormat("yyyyMMdd").parse("20110210").getTime()));

  s.save(lr);
  s.flush();
  tx.commit();
  s.close();   
   }

POJO CLASS:

package dto;

import java.io.Serializable;
import java.sql.Date;


public class LoginRegister implements Serializable{

    private int _id;
    private String _username = null;
    private String _password = null;
    Date _last_update        = null;

    public LoginRegister(){}

    public int get_id() {
        return _id;
    }


    public void set_id(int _id) {
        this._id = _id;
    }

    public String get_username() {
        return _username;
    }

    public void set_username(String _username) {
        this._username = _username;
    }

    public String get_password() {
        return _password;
    }

    public void set_password(String _password) {
        this._password = _password;
    }

    public Date get_last_update() {
        return _last_update;
    }

    public void set_last_update(Date _last_update) {
        this._last_update = _last_update;
    }



    public String toString(){
        return 
                "Id             : "+this._id+"\n"+
                "Username       : "+this._username+"\n"+
                "Password       : "+this._password+"\n"+
                "Last Update    : "+this._last_update;
    }

}

Configuration File :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- Database Connection -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>       <!-- Driver -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>          <!-- Language Used (Dialect) : Here SQL -->
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property><!-- URL -->
        <property name="connection.username">root</property>                            <!-- Username -->
        <property name="connection.password"></property>                                <!-- Password -->
        <!-- To generate SQL Queries when running the program -->
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="use_sql_comments">true</property>
        <!-- For JDBC Transaction -->
        <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <!-- Auto Commit -->
        <property name="hibernate.connection.autocommit">false</property>
        <!-- Mapping Class -->
        <mapping class ="Emp.hbm.xml" />
    </session-factory>
</hibernate-configuration>

Entity Mapper File:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping>
   <class name="qqqLoginRegister" table="qqqlogin_register">
      <id name="_id" column="id" type="integer">
         <generator class="assigned"/>
      </id>
      <property name="_userName" column="username" type="string"/>
      <property name="_password" column="password" type="string"/>
      <property name="_last_update" column="last_update" type="date"/>
   </class>
</hibernate-mapping>

Locations :

Configuration FIle : srs\Hibernate.cfg.xml

Entity Mapper : src\Emp.hbm.xml

POJO : src\dto\LoginRegister.java

Main Class : src\dao\Index.java

Upvotes: 2

Views: 1132

Answers (1)

Vasu
Vasu

Reputation: 22402

As you are NOT using the Hibernate bean annoatations, in your Hibernate.cfg.xml file, you need to change <mapping class ="Emp.hbm.xml" /> to <mapping resource ="Emp.hbm.xml" />

Hibernate is an ORM framework which maps the Java Bean to a Relational database table and the mapping can be provided directly in the Java Bean Object (using Annotations) or can be provided separately through xml files (like how you did).

Hibernate SessionFactory mappings are compiled from various XML mapping files and <mapping resource is used to load those mapping files (in your case it is a single file which is Emp.hbm.xml file)

You can refer the below documentation for more details: https://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html

Upvotes: 2

Related Questions