org.hibernate.MappingException: entity class not found ( using qualified class name does not work)

故事扮演 提交于 2019-12-10 09:43:50

问题


I'm trying to run a simple SELECT FROM table ( I have also tried SELECT FROM package.Class )query but I keep getting this error :

 org.hibernate.MappingException: entity class not found: demo.Agents
    at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:125)
    at org.hibernate.tuple.PropertyFactory.getGetter(PropertyFactory.java:191)
    at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:67)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:136)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:475)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:297)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
    at org.hibernate.console.ConsoleConfiguration$5.execute(ConsoleConfiguration.java:278)
    at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:63)
    at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:107)
    at org.hibernate.console.ConsoleConfiguration.buildSessionFactory(ConsoleConfiguration.java:273)
    at org.hibernate.eclipse.console.actions.ExecuteQueryAction.execute(ExecuteQueryAction.java:82)
    at org.hibernate.eclipse.console.actions.ExecuteQueryAction.run(ExecuteQueryAction.java:56)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.hibernate.eclipse.console.actions.ExecuteQueryAction.runWithEvent(ExecuteQueryAction.java:60)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:452)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Caused by: java.lang.ClassNotFoundException: demo.Agents
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192)
    at org.hibernate.mapping.PersistentClass.getMappedClass(PersistentClass.java:122)
    ... 43 more

Here is the hbm.xml file of the class (notice the full qualifier demo.Agents)

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 27, 2012 19:17:46 by Hibernate Tools 3.6.0 -->
<hibernate-mapping>
    <class name="demo.Agents" table="agents" schema="public">
        <id name="id" type="int">
            <column name="id" />
            <generator class="assigned"></generator>
        </id>
        <property name="ssn" type="long">
            <column name="ssn" precision="13" scale="0" not-null="true" />
        </property>
        <property name="namee" type="string">
            <column name="namee" length="15" not-null="true" />
        </property>
        <property name="surname" type="string">
            <column name="surname" length="30" not-null="true" />
        </property>
        <property name="adress" type="string">
            <column name="adress" length="100" />
        </property>
        <property name="phone" type="string">
            <column name="phone" length="20" />
        </property>
    </class>
</hibernate-mapping>

Some other details, possibly helpful:

http://img441.imageshack.us/img441/2572/ss20120627202116.png

http://img20.imageshack.us/img20/2236/ss20120624201620.png

If you need any other printscreens i'll be happy to provide them. Please help :). I'm in a really tight spot. Thanks ( and somebody add some better tags i'm to stressed out right now to think too much about them)

LE

the hibernatecfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.password">blablabla</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/projteste</property>
        <property name="hibernate.connection.username">postgres</property>
            <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    </session-factory>
</hibernate-configuration>

the mappings are done in the console configuration

LE2 see the comments (link 607) i get that error if i remove the classes from additional mappings in console configuration..

here's the hibernatecfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="">
  <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
  <property name="hibernate.connection.password">123456</property>
  <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/projteste</property>
  <property name="hibernate.connection.username">postgres</property>
  <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
  <mapping resource="demo/Clients.hbm.xml"/>
    <mapping resource="demo/Agents.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

and the stack traces

org.hibernate.MappingNotFoundException: resource: demo/Clients.hbm.xml not found
at org.hibernate.cfg.Configuration.addResource(Configuration.java:665)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1679)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1647)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1626)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1600)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1554)
at org.hibernate.console.ConfigurationFactory.loadConfigurationXML(ConfigurationFactory.java:351)
at org.hibernate.console.ConfigurationFactory.configureStandardConfiguration(ConfigurationFactory.java:279)
at org.hibernate.console.ConfigurationFactory.buildConfiguration(ConfigurationFactory.java:184)
at org.hibernate.console.ConfigurationFactory.createConfiguration(ConfigurationFactory.java:96)
at org.hibernate.console.ConsoleConfiguration$3.execute(ConsoleConfiguration.java:240)
at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:63)
at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:107)
at org.hibernate.console.ConsoleConfiguration.buildWith(ConsoleConfiguration.java:237)
at org.hibernate.console.ConsoleConfiguration.build(ConsoleConfiguration.java:188)
at org.hibernate.eclipse.console.workbench.ConsoleConfigurationWorkbenchAdapter.getChildren(ConsoleConfigurationWorkbenchAdapter.java:42)
at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.getChildren(BasicWorkbenchAdapter.java:100)
at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.fetchDeferredChildren(BasicWorkbenchAdapter.java:106)
at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:235)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)  

k4

  org.hibernate.console.HibernateConsoleRuntimeException: Could not compute classpath
    at org.hibernate.eclipse.console.EclipseLaunchConsoleConfigurationPreferences.getCustomClassPathURLS(EclipseLaunchConsoleConfigurationPreferences.java:103)
    at org.hibernate.eclipse.console.utils.ProjectUtils.findJavaProjects(ProjectUtils.java:302)
    at org.hibernate.eclipse.console.workbench.ProjectCompilerVersionChecker.validateProjectComplianceLevel(ProjectCompilerVersionChecker.java:35)
    at org.hibernate.eclipse.console.workbench.ConsoleConfigurationWorkbenchAdapter.getChildren(ConsoleConfigurationWorkbenchAdapter.java:37)
    at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.getChildren(BasicWorkbenchAdapter.java:100)
    at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.fetchDeferredChildren(BasicWorkbenchAdapter.java:106)
    at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:235)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: org.eclipse.core.runtime.CoreException: Unable to restore classpath entry.
    at org.eclipse.jdt.launching.JavaRuntime.abort(JavaRuntime.java:1376)
    at org.eclipse.jdt.launching.JavaRuntime.abort(JavaRuntime.java:1361)
    at org.eclipse.jdt.launching.JavaRuntime.newRuntimeClasspathEntry(JavaRuntime.java:731)
    at org.eclipse.jdt.launching.StandardClasspathProvider.recoverRuntimePath(StandardClasspathProvider.java:100)
    at org.eclipse.jdt.launching.StandardClasspathProvider.computeUnresolvedClasspath(StandardClasspathProvider.java:65)
    at org.eclipse.jdt.launching.JavaRuntime.computeUnresolvedRuntimeClasspath(JavaRuntime.java:1215)
    at org.hibernate.eclipse.console.utils.ClassLoaderHelper.getClasspath(ClassLoaderHelper.java:146)
    at org.hibernate.eclipse.console.EclipseLaunchConsoleConfigurationPreferences.getCustomClassPathURLS(EclipseLaunchConsoleConfigurationPreferences.java:94)
    ... 7 more
Caused by: org.xml.sax.SAXException: FWK005 parse may not be called while parsing.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:263)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at org.eclipse.jdt.launching.JavaRuntime.newRuntimeClasspathEntry(JavaRuntime.java:708)
    ... 12 more

回答1:


You forgot to declare the mapping files in the main config file:

<session-factory>
    ...
    <mapping resource="demo/Clients.hbm.xml"/>
    <mapping resource="demo/Agents.hbm.xml"/>
</session-factory>

I'll repeat my comment here: the entities should be named with a singular form: Agent, Client. Tweak the auto-generation (see http://docs.jboss.org/tools/3.0.1.GA/en/hibernatetools/html_single/index.html#tab_and_col), or refactor the generated code afterwards, because all your application code will be based on these names, and it's really awful to call an Agent an Agents. The code will be confusing and hard to understand. Entities are the core of your application anyway, and should contain other methods than just setters and getters. So automatic generation is OK to start up, but should be forgotten afterwards.




回答2:


In your xxx.hbm.xml use qualified class name: package_name.xxx in the hibernate-mapping element. This is a jboss specification for POJOs.




回答3:


And Check also the .hbm.xml file, that class name is fully qualified against the table name. eg:

<class name="com.test.Emp" table="Emp">.. </class>



回答4:


Looks like i solved it :
1) i did not need to modify my original hibernatecfg.xml . Apparently there was an inconsistency between the mappings i defined in the console configuration and the hbm.xml files i had in my project folder(their names where a little different).
Whoever is reading this should not add <sessionfactory> tag if you use ant to build pojos from hbmxml files ( something with double import errors if i remember go here http://docs.jboss.org/tools/latest/en/hibernatetools/html_single/ and search for duplicate). Always remember to rebuild and refresh your console configuration AND your project
2) the select id, ssn FROM demo.Agents query works but select id,ssn FROM agents does not ...is'it weird?
3)remember to save your query before you execute; it seems that otherwise it executes the older query
4) if my answer was helpful leave a comment :D even if it helped you 10 years after i posted it. I will check :D
5) thanks to Nizet for his suggestions
6) anything else i missed?



来源:https://stackoverflow.com/questions/11234868/org-hibernate-mappingexception-entity-class-not-found-using-qualified-class-n

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!