Java Spring Hibernate映射问题
因为我不熟悉休眠和映射。我无法找到这个原因的确切问题。当我发现问题的具体内容时,我将更新问题标题。我在运行spring项目时遇到以下错误。xml是从JBoss Hibernate工具生成的。(我会) 堆栈跟踪如下所示Java Spring Hibernate映射问题,java,spring,hibernate,Java,Spring,Hibernate,因为我不熟悉休眠和映射。我无法找到这个原因的确切问题。当我发现问题的具体内容时,我将更新问题标题。我在运行spring项目时遇到以下错误。xml是从JBoss Hibernate工具生成的。(我会) 堆栈跟踪如下所示 Mar 10, 2014 4:28:05 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springfram
Mar 10, 2014 4:28:05 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@a4c4a0d: display name [org.springframework.context.support.ClassPathXmlApplicationContext@a4c4a0d]; startup date [Mon Mar 10 16:28:05 IST 2014]; root of context hierarchy
Mar 10, 2014 4:28:05 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [config/beanLocations.xml]
Mar 10, 2014 4:28:05 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [database/dataSource.xml]
Mar 10, 2014 4:28:05 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [database/hibernate.xml]
Mar 10, 2014 4:28:21 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@a4c4a0d]: org.springframework.beans.factory.support.DefaultListableBeanFactory@5152a09f
Mar 10, 2014 4:28:21 PM org.springframework.core.io.support.PropertiesLoaderSupport loadProperties
INFO: Loading properties file from class path resource [properties/hibernate.properties]
Mar 10, 2014 4:28:21 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5152a09f: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,sessionFactory,transactionManager,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,aneurismLocationDAO,annotationDAO,appUserDAO,deviceDAO,deviceManufacturerDAO,jobDAO,patientDAO,resourceDAO,roleDAO,strategyDAO,surgeryDAO,surgeryDeviceDAO,userRoleDAO]; root of factory hierarchy
Mar 10, 2014 4:28:21 PM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
37 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.5-Final
39 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
43 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
47 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
17632 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Resource -> resource
28298 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Device -> device
40931 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.AneurismLocation -> aneurism_location
43487 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Strategy -> strategy
46348 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Job -> job
48916 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.SurgeryDevice -> surgery_device
51356 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.UserRole -> user_role
54070 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Surgery -> surgery
56434 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Annotation1 -> annotation
58732 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Patient -> patient
61120 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.Role -> role
63747 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.DeviceManufacturer -> device_manufacturer
66318 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: org.e.models.AppUser -> app_user
Mar 10, 2014 4:29:28 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5152a09f: defining beans [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,sessionFactory,transactionManager,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,aneurismLocationDAO,annotationDAO,appUserDAO,deviceDAO,deviceManufacturerDAO,jobDAO,patientDAO,resourceDAO,roleDAO,strategyDAO,surgeryDAO,surgeryDeviceDAO,userRoleDAO]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [database/hibernate.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Association references unmapped class: org.e.models.Annotation
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at Application.main(Application.java:23)
Caused by: org.hibernate.MappingException: Association references unmapped class: org.endovantage.models.Annotation
at org.hibernate.cfg.HbmBinder.bindCollectionSecondPass(HbmBinder.java:2473)
at org.hibernate.cfg.HbmBinder$CollectionSecondPass.secondPass(HbmBinder.java:2752)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:66)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1221)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:673)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
... 15 more
这是我的DAO实现
package org.e.persistance.dao.impli;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.e.models.Annotation1;
import org.e.persistance.dao.Annotation1DAO;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository("annotation1DAO")
public class Annotation1DAOImpli implements Annotation1DAO {
private static final Log log = LogFactory.getLog(Annotation1DAOImpli.class);
@Autowired
private SessionFactory sessionFactory;
public void persist(Annotation1 transientInstance) {
log.debug("persisting Annotation1 instance");
try {
sessionFactory.getCurrentSession().persist(transientInstance);
log.debug("persist successful");
} catch (RuntimeException re) {
log.error("persist failed", re);
throw re;
}
}
public void delete(Annotation1 persistentInstance) {
log.debug("deleting Annotation1 instance");
try {
sessionFactory.getCurrentSession().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
public Annotation1 merge(Annotation1 detachedInstance) {
log.debug("merging Annotation1 instance");
try {
Annotation1 result = (Annotation1) sessionFactory.getCurrentSession()
.merge(detachedInstance);
log.debug("merge successful");
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}
public Annotation1 findById(java.lang.Long id) {
log.debug("getting Annotation1 instance with id: " + id);
try {
Annotation1 instance = (Annotation1) sessionFactory
.getCurrentSession().get("Annotation1", id);
if (instance == null) {
log.debug("get successful, no instance found");
} else {
log.debug("get successful, instance found");
}
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}
}
对不起,内容太长了。我真的很感谢你在这方面的帮助
编辑:
休眠配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!-- Hibernate session factory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>/hibernate/Resource.hbm.xml</value>
<value>/hibernate/Device.hbm.xml</value>
<value>/hibernate/AneurismLocation.hbm.xml</value>
<value>/hibernate/Strategy.hbm.xml</value>
<value>/hibernate/Job.hbm.xml</value>
<value>/hibernate/SurgeryDevice.hbm.xml</value>
<value>/hibernate/UserRole.hbm.xml</value>
<value>/hibernate/Surgery.hbm.xml</value>
<value>/hibernate/Annotation1.hbm.xml</value>
<value>/hibernate/Patient.hbm.xml</value>
<value>/hibernate/Role.hbm.xml</value>
<value>/hibernate/DeviceManufacturer.hbm.xml</value>
<value>/hibernate/AppUser.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
org.hibernate.dialogue.mysqldialogue
真的
/hibernate/Resource.hbm.xml
/hibernate/Device.hbm.xml
/hibernate/AneurismLocation.hbm.xml
/hibernate/Strategy.hbm.xml
/hibernate/Job.hbm.xml
/hibernate/SurgeryDevice.hbm.xml
/hibernate/UserRole.hbm.xml
/hibernate/Surgery.hbm.xml
/hibernate/Annotation1.hbm.xml
/hibernate/Patient.hbm.xml
/hibernate/Role.hbm.xml
/hibernate/DeviceManufacturer.hbm.xml
/hibernate/AppUser.hbm.xml
这是我的数据源配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>properties/hibernate.properties</value>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- Database Configuration -->
<import resource="../database/dataSource.xml" />
<import resource="../database/hibernate.xml" />
<context:annotation-config />
<context:component-scan base-package="org.endovantage" />
</beans>
属性/hibernate.properties
这是我的bean位置配置
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>properties/hibernate.properties</value>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- Database Configuration -->
<import resource="../database/dataSource.xml" />
<import resource="../database/hibernate.xml" />
<context:annotation-config />
<context:component-scan base-package="org.endovantage" />
</beans>
谢谢您需要添加对映射文件的引用,该映射文件将
org.e.models.Annotation1
映射到Hibernate.xml
中
<session-factory>
<mapping resource="org/e/models/Annotation1.hbm.xml" />
</session-factory>
您需要添加对映射文件的引用,该映射文件将
org.e.models.Annotation1
映射到Hibernate.xml
中
<session-factory>
<mapping resource="org/e/models/Annotation1.hbm.xml" />
</session-factory>
我认为您遗漏了这一行:
<mapping resource="path/to/your/annotation.hbm.xml"></mapping>
在您的hibernate.cfg.xml中。我认为您缺少这一行:
<mapping resource="path/to/your/annotation.hbm.xml"></mapping>
在hibernate.cfg.xml中,未映射类“注释”。加
<value>/hibernate/Annotation1.hbm.xml</value>
/hibernate/Annotation1.hbm.xml
如果不存在,则创建文件。您的类“注释”未映射。加
<value>/hibernate/Annotation1.hbm.xml</value>
/hibernate/Annotation1.hbm.xml
如果不存在,则创建文件。是否可以发布您的hibernate配置file@henrycharles我已经添加了我的hibernate.xml您的
hibernate.xml
不是hibernate配置文件。@PeterRader我将添加我正在使用的所有配置文件嗨,各位,谢谢你们的大力帮助。它首先崩溃的原因是,hbm.xml中的类不是完全限定的。在那之后,我得到了错误的答案。所以,我将+1所有人!:)你可以发布你的hibernate配置吗file@henrycharles我已经添加了我的hibernate.xml您的hibernate.xml
不是hibernate配置文件。@PeterRader我将添加我正在使用的所有配置文件嗨,各位,谢谢你们的大力帮助。它首先崩溃的原因是,hbm.xml中的类不是完全限定的。在那之后,我得到了错误的答案。所以,我将+1所有人!:)我没有使用hibernate.cfg.xml文件。我跟着。他没有包括这一点。他定义了一个hibernate.xml,我认为它的内容是相同的。请参见编辑。谢谢,我没有使用hibernate.cfg.xml文件。我跟着。他没有包括这一点。他定义了一个hibernate.xml,我认为它的内容是相同的。请参见编辑。感谢洛蒂将它添加到hibernate.xml中。请看编辑。谢谢你这么快reply@Diode它说有一个类org.endovantage.models.Annotation没有任何映射。这是类org.e.models.Annotation1的副本吗?是的,我查看了所有地方,看看是否有遗漏的注释类需要手动重命名。那么,是它导致了这个问题吗?@Diode检查包org.endovantage.models并删除Annotation.java如果不需要,我试图删除它,情况会变得更糟。映射中有一个或多个关系:(我已将其添加到hibernate.xml中。请查看编辑。谢谢您的快速回复。)reply@Diode它说有一个类org.endovantage.models.Annotation没有任何映射。这是类org.e.models.Annotation1的副本吗?是的,我到处查看,看看是否有任何遗漏的注释类需要手动重命名。是吗这导致问题?@Diodel检查包org.endovantage.models并删除Annotation.java如果没有必要,我试图删除它,情况会变得更糟。映射中有一个或多个关系:(好的,我从注释更改为注释1,因为我认为这是问题的原因。我将更改所有内容并再次检查。好的,我从注释更改为注释1,因为我认为这是问题的原因。我将更改所有内容并再次检查。