Spring Hibernate没有提交数据

时间:2016-11-16 19:58:24

标签: java spring hibernate spring-mvc transactions

我使用Spring 4.2.3和Hibernate 5.0.6开发了一个Spring MVC应用程序。在我们的一些测试中,我们发现我们的一些数据没有保存到数据库(Oracle)。代码如下:

@Service
@Transactional
public class MyService {
    @Autowired
    private MyDao dao;

    public void saveCustomer(Customer c) {
        dao.saveCustomer(c);
    }
}

@Repository
@Transactional
public class MyDao {
    @Autowired
    private SessionFactory sessionFactory;   // Hibernate's SessionFactory

    public void saveCustomer(Customer cust) {
        sessionFactory.getCurrentSession().clear();
        sessionFactory.getCurrentSession().flush();
        sessionFactory.getCurrentSession().save(cust);
    }
}

说实话,我刚刚在MyDao上看到了@Transactional,因为我正在写这篇文章。这可能是错的,因为@Transactional已经在服务层上了。

我们正在使用Java Config ....显示相关的bean ....

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan({"my.package"})
public class Config extends WebMvcConfigurerAdapter {

    @Bean(name = "sessionFactory")
    public SessionFactory getSessionFactory(ComboPooledDataSource dataSource) {
    LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
    sessionBuilder.scanPackages("my.entities"); 
    sessionBuilder.addProperties(getHibernateProperties());
    return sessionBuilder.buildSessionFactory();
    }

    @Bean(name = "transactionManager")
    public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
    HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);    
    return transactionManager;
    }
}

我的问题是,除了MyDao上的@Transactional,它不应该存在,对于为什么客户不保存到数据库,还有什么能让人高兴吗?我们甚至正确地进行交易吗?我从来不喜欢使用Hibernate的SessionFactory,但这就是我们的方式。我们是否在Spring Transaction中正确使用它?

谢谢!

克里斯

0 个答案:

没有答案