读书人

spring整合hibernate 测试类报错一给

发布时间: 2013-09-11 17:27:30 作者: rapoo

spring整合hibernate 测试类报错,一给完所有家产,只求高手秒杀
applicationContext.xml
<?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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">


<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:conf/jdbc.properties</value>
</property>
</bean>

<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<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.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>com.BeNnovo.EmployeesManagement.coreCode.entity.*</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">50</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- annotation 配置后可以用@Resource -->
<context:annotation-config />

<aop:aspectj-autoproxy />

<aop:config proxy-target-class="true">
<aop:pointcut id="bussinessService"
expression="execution(public * com.BeNnovo.EmployeesManagement.coreCode.service.employeesManagerment.impl..*.*(..))" />
<aop:advisor pointcut-ref="bussinessService"


advice-ref="txAdvice" />
</aop:config>

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>



</beans>


applicationContext-employees.xml

<?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 id="employeesService" class="com.BeNnovo.EmployeesManagement.coreCode.service.employeesManagerment.impl.EmployeesService"/>
<bean id="employeesDAO" class="com.BeNnovo.EmployeesManagement.coreCode.dao.employeesManagerment.impl.EmployeesDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="emloyeesLeaveService" class="com.BeNnovo.EmployeesManagement.coreCode.service.employeesManagerment.impl.EmloyeesLeaveService"/>
<bean id="emloyeesLeaveDAO" class="com.BeNnovo.EmployeesManagement.coreCode.dao.employeesManagerment.impl.EmloyeesLeaveDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>


</beans>


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration (
locations = {
"classpath:applicationContext.xml",
"classpath:applicationContext-employees.xml"

}
)
public class BaseTest extends AbstractTransactionalJUnit4SpringContextTests
{

}

测试类
public class TestEmployeesService extends BaseTest
{

private IEmployeesService employeesService;
@Test
public void createEmployees()
{
EmployeesDTO employeesDTO = new EmployeesDTO();
employeesDTO.setEmployeesName("admin");
employeesDTO.setEmployeesPassword("admin");
employeesDTO.setEmployeesIdentityCard("123434");
employeesDTO.setEmpoyeesMaritalStatus(EmployeesMaritalStatus.MARRIED);
employeesDTO.setEmployeesSex(EmployeesSex.MAN);
for (int i = 0; i < 50; i++)
{
employeesDTO.setEmployeesCode("B"+i);
employeesService.createEmployees(employeesDTO);
}

}
public IEmployeesService getEmployeesService()
{
return employeesService;
}
@Resource
public void setEmployeesService(IEmployeesService employeesService)
{
this.employeesService = employeesService;
}
}
业务逻辑层
public class EmployeesService implements IEmployeesService
{

private IEmployeesDAO employeesDAO;
@Override
public void createEmployees(EmployeesDTO employeesDTO)
{
if (employeesDTO.getEmployeesName() == null || employeesDTO.getEmployeesName() == "" || employeesDTO.getEmployeesName().equals("null") || employeesDTO.getEmployeesName().equals(""))
{
throw new RuntimeException("CustomerName is null");
}

Employees employees = new Employees();
EmployeesDTO.dto2entity(employeesDTO, employees);
employeesDAO.save(employees);
String code = employeesDAO.autoCodeFind();
Long codd = Long.parseLong(code);
TempAutoCode temp = new TempAutoCode();
temp.setId(1l);
temp.setTempCode(codd++);


employeesDAO.SessionClean();
employeesDAO.updateObject(temp);

}
public IEmployeesDAO getEmployeesDAO()
{
return employeesDAO;
}

@Resource
public void setEmployeesDAO(IEmployeesDAO employeesDAO)
{
this.employeesDAO = employeesDAO;
}

}
整合好的DAO层
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateTemplate;

@SuppressWarnings("unchecked")
public class TemplateDAOImpl<T> implements TemplateDAO<T>
{

private HibernateTemplate hibernateTemplate;
private Class<T> templateClass;

public void save(T entity) throws DataAccessException
{
hibernateTemplate.save(entity);
}

public void update(T entity) throws DataAccessException
{
getHibernateTemplate().saveOrUpdate(entity);
}

public void delete(T entity) throws DataAccessException
{
getHibernateTemplate().delete(entity);
}

public T findById(Long id) throws DataAccessException
{
return (T) getHibernateTemplate().get(getTemplateClass(), id);
}

public List<T> findAllAttribute()
{
return findByCriteria();
}

@Override
public Object merge(T entity) throws DataAccessException
{
return getHibernateTemplate().merge(entity);
}

public List<T> findByCriteria(Criterion... criterions)
{
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(getTemplateClass());
for (Criterion criterion : criterions)
{
detachedCriteria.add(criterion);
}

return getHibernateTemplate().findByCriteria(detachedCriteria);
}
public void SessionClean()
{
getHibernateTemplate().clear();

}
public HibernateTemplate getHibernateTemplate()
{
return hibernateTemplate;
}
public void updateObject(Object entity) throws DataAccessException
{
getHibernateTemplate().saveOrUpdate(entity);
}

@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate)
{
this.hibernateTemplate = hibernateTemplate;
}

public Class<T> getTemplateClass()
{
return templateClass;
}

public void setTemplateClass(Class<T> templateClass)
{
this.templateClass = templateClass;
}

}
//继承整合好的DAO
public class EmployeesDAO extends TemplateDAOImpl<Employees> implements IEmployeesDAO
{

}

错误
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeesService': Injection of resource methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeesDAO' defined in class path resource [applicationContext-employees.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'HibernateTemplate' of bean class [com.BeNnovo.EmployeesManagement.coreCode.dao.employeesManagerment.impl.EmployeesDAO]: Bean property 'HibernateTemplate' is not writable or has an invalid setter method. Did you mean 'hibernateTemplate'?
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeesDAO' defined in class path resource [applicationContext-employees.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'HibernateTemplate' of bean class [com.BeNnovo.EmployeesManagement.coreCode.dao.employeesManagerment.impl.EmployeesDAO]: Bean property 'HibernateTemplate' is not writable or has an invalid setter method. Did you mean 'hibernateTemplate'?




[解决办法]
EmployeesDAO 这个类里有个hibernateTemplate 变量,你可能写成了HibernateTemplate,也可能没有它的setter方法。
[解决办法]
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeesService': Injection of resource methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeesDAO' defined in class path resource [applicationContext-employees.xml]:

不能创建'employeesService' bean

查看 applicationContext-employees.xml配置文件
[解决办法]
EmployeesService 这个名字很可能在其他地方使用了!所以创建的时候有错误!你可以换个名字试试
[解决办法]
让你的EmployeesDAO继承 org.springframework.orm.hibernate3.support.HibernateDaoSupport就行,不用自己再写个TemplateDAO
[解决办法]
set方法没写对 变量名大小写错了?

[解决办法]
看看这里有,这里有个完整的配置hibernate3 springmvc 配的http://www.wetall.com/article_browse?cid=7&id=b880afca-074b-4ec2-af10-1b6ae37c796d

读书人网 >J2EE开发

热点推荐