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