Zimy
Zimy

Reputation: 165

Hibernate: Unable to load class declared in Hibernate configuration <mapping/> entry

I am completely new in Hibernate and got such an stacktrace:

hql> from TracksEntity 
[2014-04-26 21:13:45] org.hibernate.MappingException: Unable to load class [ model.TracksEntity] declared in Hibernate configuration <mapping/> entry
[2014-04-26 21:13:45] java.lang.ClassNotFoundException: model.TracksEntity
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:259)
    at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:192)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2188)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2139)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2119)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2072)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2045)
    at com.intellij.hibernate.remote.impl.RemoteConfigurationImpl.configure(RemoteConfigurationImpl.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
    at sun.rmi.transport.Transport$1.run(Transport.java:178)
    at sun.rmi.transport.Transport$1.run(Transport.java:175)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)

My hibernate.cfg.xml and TracksEntity.java was automatically generated by Intellij Idea:

TracksEntity.java: package model;

import javax.persistence.*;

@Entity
@Table(name = "TRACKS", schema = "APP", catalog = "")
public class TracksEntity {
    private int id;
    private String artist;
    private int duration;
    private String title;
    private String url;

    @Id
    @Column(name = "ID")
    public int getId () {
        return id;
    }

    public void setId (int id) {
        this.id = id;
    }

    @Basic
    @Column(name = "ARTIST")
    public String getArtist () {
        return artist;
    }

    public void setArtist (String artist) {
        this.artist = artist;
    }

    @Basic
    @Column(name = "DURATION")
    public int getDuration () {
        return duration;
    }

    public void setDuration (int duration) {
        this.duration = duration;
    }

    @Basic
    @Column(name = "TITLE")
    public String getTitle () {
        return title;
    }

    public void setTitle (String title) {
        this.title = title;
    }

    @Basic
    @Column(name = "URL")
    public String getUrl () {
        return url;
    }

    public void setUrl (String url) {
        this.url = url;
    }

    @Override
    public boolean equals (Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        TracksEntity that = (TracksEntity) o;

        if (duration != that.duration) return false;
        if (id != that.id) return false;
        if (artist != null ? !artist.equals(that.artist) : that.artist != null) return false;
        if (title != null ? !title.equals(that.title) : that.title != null) return false;
        if (url != null ? !url.equals(that.url) : that.url != null) return false;

        return true;
    }

    @Override
    public int hashCode () {
        int result = id;
        result = 31 * result + (artist != null ? artist.hashCode() : 0);
        result = 31 * result + duration;
        result = 31 * result + (title != null ? title.hashCode() : 0);
        result = 31 * result + (url != null ? url.hashCode() : 0);
        return result;
    }
}

hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:derby:/home/zimy/Documents/drbdb;create=true;create=true</property>
        <property name="connection.driver_class">org.apache.derby.jdbc.EmbeddedDriver</property>
        <mapping class="model.TracksEntity"/>
    </session-factory>
</hibernate-configuration>

What the problem is? I see that it is not found, but why?

Upvotes: 4

Views: 32437

Answers (10)

Boss gamer
Boss gamer

Reputation: 1

I was having the same issue, After adding this dependency it's resolved.

    <dependency>
        <groupId>javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.12.1.GA</version>
    </dependency>

Upvotes: 0

Vasantharajan. P
Vasantharajan. P

Reputation: 1

To resolve this issue add maven spring-boot dependency

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
   <exclusions>
       <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
       </exclusion>
   </exclusions>

Upvotes: 0

Abhishek KM
Abhishek KM

Reputation: 11

You can do it by two methods, 2nd one definitely works.

  1. Either adding a mapping entry in hibernate.cfg.xml should make it work

<mapping class="com.sample.yourClass" />

  1. In your code, After you create Configuration object, Do add class like,
Configuration config = new Configuration();
config.addClass(com.sample.yourClass);

Upvotes: 1

Atequer Rahman
Atequer Rahman

Reputation: 1219

In my case, I have just redeployed project. Then problem solved!

Upvotes: 0

cljk
cljk

Reputation: 975

My mistake was a camel case problem. I had an embedded entity "IndexPK" and wrote "IndexPk" in the mapping file. I compared it ~20 times.... till I figured this out.

Upvotes: 0

arn-arn
arn-arn

Reputation: 1377

i recently experienced this. I checked everything and didn't find anything that might have caused it. In desperation, i just moved the "/>" closer in the mapping and saved it. And it worked. Mysterious...

Upvotes: 0

Kasi subramaniam
Kasi subramaniam

Reputation: 41

I had a similar problem when the mapping file wouldn´t load correctly. The answer to this problem seems to be that we need to use the correct import statements in our Model classes.

Changing the import to import javax.persistence.Entity instead of using the one from hibernate package ( ie org.hibernate.annotations.Entity), fixed the issue in my case.

This issue is a real pain , and I spent more than 1/2 day looking at all corners, when a simple import fixed the issue.

Hope this helps.

Upvotes: 2

Mohit
Mohit

Reputation: 807

Worked for me:

Changing position of mapping tag in hibernate.cfg.xml for class which was not loading previously.

I kept that at top now.

Upvotes: 0

chiperortiz
chiperortiz

Reputation: 4991

Sounds quite silly but i was putting my entity Class in a package which is not the same i put in the mapping.. and hibernate of course could not find it... just for reference.. maybe a recheck can solve your problem best regards.

Upvotes: 7

nik
nik

Reputation: 210

write in this pattern

 <session-factory>

    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dairy
    </property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.connection.pool_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.current_session_context_class">thread</property>

    <!-- MAPPING -->
    <!-- <mapping class="com.om.model.Test" /> -->
    <mapping class="com.om.model.RateCalculationBean" />

</session-factory>

and also no need to mention scema

Upvotes: 3

Related Questions