我有一个使用Spring3和Hibernate4的Web项目,现在我想在不使用xml文件的情况下测试DAO.为此,我创建了一个类,该类创建了一个LocalSessionFactoryBean,其中包含应用程序的xml文件中包含的数据和一个简单的测试类.
但是,localSessionFactoryBean.getObject()返回的sessionFactory为null.我一直在寻找像一些例子这和他们有同样的问题,当我修改他们没有Spring运行.你有什么主意吗?
这是准备sessionFactory的代码:
@Configuration
@Transactional
@EnableTransactionManagement
@ComponentScan({ "com.company" })
public class HibernateInitializator {
public SessionFactory getSessionFactory() {
Properties hibernateProperties = getHibernateProperties();
DataSource dataSource = getDatasourceConfiguration();
LocalSessionFactoryBean localSessionFactoryBean = generateSessionFactoryBean(new String[] { "com.company" },
dataSource, hibernateProperties);
SessionFactory sessionFactory = localSessionFactoryBean.getObject();
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return sessionFactory;
}
private DataSource getDatasourceConfiguration() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/dbName");
dataSource.setUsername("username");
dataSource.setPassword("password");
return dataSource;
}
private static LocalSessionFactoryBean generateSessionFactoryBean(String[] basePackage, DataSource dataSource,
Properties hibernateProperties) {
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
localSessionFactoryBean.setDataSource(dataSource);
localSessionFactoryBean.setPackagesToScan(basePackage);
localSessionFactoryBean.setHibernateProperties(hibernateProperties);
return localSessionFactoryBean;
}
private static Properties getHibernateProperties() {
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
hibernateProperties.put("hibernate.show_sql", false);
hibernateProperties.put("hibernate.generate_statistics", false);
hibernateProperties.put("hibernate.hbm2ddl.auto", "update");
hibernateProperties.put("hibernate.use_sql_comments", false);
return hibernateProperties;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个使用它的简单测试类:
public class GenericDAOHibernateTest {
private GenericDAOHibernate dao;
@BeforeTest
private void testInitialization() {
dao = new GenericDAO();
HibernateInitializator initializator = new HibernateInitializator();
SessionFactory sessionFactory = initializator.getSessionFactory();
dao.setSessionFactory(sessionFactory);
}
@Test(description = "Checks that returns the user list ")
public void shouldReturnsUserList() throws SQLException, Exception {
List<Object[]> openResultSetList = dao.doSomeOperation();
...
}
}
Run Code Online (Sandbox Code Playgroud)
Kee*_*san 12
尝试添加此行
localSessionFactoryBean.afterPropertiesSet();
Run Code Online (Sandbox Code Playgroud)
在LocalSessionFactoryInstance已设置属性后的方法中.你的方法将是
private static LocalSessionFactoryBean generateSessionFactoryBean(String[] basePackage, DataSource dataSource,
Properties hibernateProperties) {
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
localSessionFactoryBean.setDataSource(dataSource);
localSessionFactoryBean.setPackagesToScan(basePackage);
localSessionFactoryBean.setHibernateProperties(hibernateProperties);
// Added the below line
localSessionFactoryBean.afterPropertiesSet();
return localSessionFactoryBean;
}
Run Code Online (Sandbox Code Playgroud)
此链接可能会为问题添加更多洞察力.
根据文档,
public void afterPropertiesSet()抛出IOException
在BeanFactory设置了所有提供的bean属性(并且满足BeanFactoryAware和ApplicationContextAware)之后,由BeanFactory调用.此方法允许bean实例仅在设置了所有bean属性时执行初始化,并在配置错误时抛出异常.
在您的情况下,我认为您需要手动调用代码.
| 归档时间: |
|
| 查看次数: |
7847 次 |
| 最近记录: |