2012-10-06 14 views
2

我想实现一个简单的DAO使用休眠4和弹簧3.试图坚持使用hibernate 4和spring 3的oracle数据库而没有成功。测试通过但数据不会持久。

当我尝试保存或删除数据库中的一行,事务不会持久。我已经包含了一些代码,以显示如何保存在数据库中不起作用:

我有一个junit测试,它只是试图在数据库中保存一个StockEntityDTO。

@RunWith(SpringJUnit4ClassRunner.class) 
public class StocksDAOImplTest extends 
    AbstractTransactionalJUnit4SpringContextTests { 

@Autowired 
protected StocksDAO stockDao; 


@Test 
public void shouldInsertIntoDatabase() { 
    BigDecimal price = new BigDecimal(653.50); 
    StockEntityDTO savedStock = new StockEntityDTO("GOOG", price, "google"); 
    stockDao.create(savedStock); 
    StockEntityDTO retrievedStock = stockDao.getById(savedStock.getId()); 
    assertEquals(savedStock, retrievedStock); 
} 

测试通过,但预期的行(1,“GOOG”,653.50,“google”)没有在数据库中持久化。

的DAO看起来是这样的:

@Transactional 
public abstract class AbstractHibernateDAO<T extends Serializable> { 

private Class<T> clazz; 


@Resource(name = "sessionFactory") 
private SessionFactory sessionFactory; 


public void setClazz(final Class<T> clazzToSet) { 
    this.clazz = clazzToSet; 
} 


public void create(final T entity) { 
    Session session = this.getCurrentSession(); 
    session.save(entity); 

} 

应用程序上下文:

<tx:annotation-driven transaction-manager="transactionManager" /> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> 
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> 
    <property name="username" value="gtp" /> 
    <property name="password" value="gtp" /> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.ubs.gtp.data.domain" /> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext 
      </prop> 
     </props> 
    </property> 
</bean> 

希望有人可以提供帮助。从我的代码中可以看出,我对春天来说很陌生。

回答

1

AbstractTransactionalJUnit4SpringContextTests在测试后回滚。尝试在最后一行设置断点,然后检查数据库。如果您不需要此默认行为,则可以使用Rollback注释。