我正在做spring+hibernate繁殖。当我在tomcat服务器上运行该应用程序时,出现了一些异常。下面是我的代码。
这是我的bean配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<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>WEB-INF/database/db.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>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>Employee.hbm.xml</value>
</list>
</property>
</bean>
<bean id="employeeBo" class="com.saggezza.employee.bo.impl.EmployeeBoImpl">
<property name="employeeDao" ref="employeeDao" />
</bean>
<bean id="employeeDao" class="com.saggezza.employee.dao.impl.EmployeeDaoImpl">
<constructor-arg ref="sessionFactory"></constructor-arg>
</bean>
这是我的道课。
public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao {
private SessionFactory sessionFactory;
public EmployeeDaoImpl(SessionFactory sessionfactory){
this.sessionFactory=sessionfactory;
}
@Override
public List<Employee> getEmployeeDetails() {
return getHibernateTemplate().find("from Employee");
}
}
在这里,另一个班级的employeeBo正在调用employeeDaoImpl。当我运行这个我得到以下异常。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeBo' defined in ServletContext resource [/WEB-INF/spring/EmployeeBean.xml]: Cannot resolve reference to bean 'employeeDao' while setting bean property 'employeeDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeDao' defined in ServletContext resource [/WEB-INF/spring/EmployeeBean.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
任何人都可以帮助解决此问题。我已经尝试了很多并且也用谷歌搜索了它,但是确实找到了解决方案。
如果有两个配置文件,则复制“ sessionFactory”定义。删除“
sessionFactory”定义之一。在IllegalArgumentException之前,您将有重复的bean定义异常。
编辑:发表评论后,
public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao {
public EmployeeDaoImpl(SessionFactory sessionfactory){
setSessionFactory(sessionfactory);
}
@Override
public List<Employee> getEmployeeDetails() {
return getHibernateTemplate().find("from Employee");
}
}
或在上面的代码中删除构造函数,并使用setter注入来注入“ sessionFactory”
org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(SessionFactory)
。请参见。我喜欢以后的方法。
问题内容: 如何使用Java配置创建SessionFactory? 由于某些原因,此方法不起作用…它总是返回null。 问题答案: 这里值得一提的是Spring 3.1引入了LocalSessionFactoryBuilder,它专门设计用于@Bean方法中。 http://static.springsource.org/spring/docs/3.1.0.RC1/javadoc- api/org
问题内容: 我有一个Spring + Hibernate / Flex应用程序,需要在数据库模式之间动态切换。为了实现这个目标我实现了一个AbstractRoutingDataSource下面这个文章。不幸的是,它不起作用。它实际上以默认架构(logical_public)执行SQL。任何帮助将不胜感激。谢谢。 这是我的设置: applicationContext.xml 包含两个数据源。每个数据
问题内容: 这正在工作: 但是升级到上述版本会破坏它。使用 Spring 3.1.Release* 和 Hibernate 4.0.0.FINAL 创建 SessionFactory bean 的正确方法是什么? *** 部署时的错误是: 嵌套的异常是java.lang.NoClassDefFoundError:Lorg / hibernate / cache / CacheProvider; 编
有些人在不同的问题上提到,如果数据库在执行之前不存在,就会发生这个错误,所以我手动创建了数据库,但仍然会出现这个错误。 编辑:这里是应用程序的跟踪日志。由于文本太多,我将其上传为文件:https://ufile.io/zuk69
问题内容: 我正在将Hibernate升级到最新版本。我的年纪不大,但是升级时,SessionFactory似乎不再关闭。 这是我的 新 类: 这是我的 老 班级: 这是我的 hibernate.cfg.xml : 我在其中创建会话的代码: 主要方法: 问题答案: 没错,Hibernate 4.3.x中似乎存在一个错误,该错误中,由Hibernate的默认连接池生成的线程在关闭时不会被清除。我在这