简体   繁体   English

Hibernate:无法加载在 Hibernate 配置中声明的类<mapping/>入口

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

I am completely new in Hibernate and got such an stacktrace:我是 Hibernate 的新手,并得到了这样的堆栈跟踪:

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:我的 hibernate.cfg.xml 和 TracksEntity.java 是由 Intellij Idea 自动生成的:

TracksEntity.java: package model; TracksEntity.java:包模型;

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: 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?我看到它没有找到,但为什么呢?

听起来很傻,但我把我的实体类放在一个包中,这与我放在映射中的不一样......并且休眠当然找不到它......仅供参考......也许重新检查可以解决你的问题最好的问候.

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也无需提及 scema

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.将导入更改为import javax.persistence.Entity而不是使用来自 hibernate 包(即org.hibernate.annotations.Entity )的导入,解决了我的问题。

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.这个问题真的很痛苦,当一个简单的导入解决了这个问题时,我花了超过 1/2 天的时间查看各个角落。

Hope this helps.希望这可以帮助。

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在 hibernate.cfg.xml 中添加映射条目应该可以使它工作

<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);

Worked for me :为我工作

Changing position of mapping tag in hibernate.cfg.xml for class which was not loading previously.为之前未加载的类更改 hibernate.cfg.xml 中映射标记的位置。

I kept that at top now.我现在把它放在首位。

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...神秘...

My mistake was a camel case problem.我的错误是骆驼案例问题。 I had an embedded entity "IndexPK" and wrote "IndexPk" in the mapping file.我有一个嵌入式实体“IndexPK”并在映射文件中写了“IndexPk”。 I compared it ~20 times.... till I figured this out.我比较了大约 20 次......直到我想通了。

In my case, I have just redeployed project.就我而言,我刚刚重新部署了项目。 Then problem solved!然后问题解决了!

To resolve this issue add maven spring-boot dependency要解决此问题,请添加 maven spring-boot 依赖项

<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>

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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM