让我们考虑一下,我们有一个结构如下的数据库:
假设每个重要表都有一个DAO : NewsDAO,AuthorsDAO。每个DAO都有一个insert方法。在insert方法开始时,获取连接,然后关闭连接。另外,假设我们有一个连接管理器类,它处理到数据库的连接,并使用Singleton模式进行连接。基本上每次返回相同的连接。
现在问题来了。想一想,当我们必须插入新闻,我们也必须插入到作者。这意味着我们需要一笔交易。
在NewsDAO插入方法中,我们获取连接,将它的自动提交设置为false,调用AuthorsDAO插入方法,将连接的自动提交设置为true,然后关闭连接。但是,正如我前面提到的,在每个insert方法中,我们获取连接,然后关闭它。因为我们在另一个insert方法中有一个insert方法,所以连接在内部insert方法中是关闭的。
这个问题有什么解决办法吗?
发布于 2015-07-09 17:48:40
您可以做的是,将事务管理从DAO中移出。编写一个服务层,它将封装所有DAO调用,并在服务方法开始时启动事务,并在结束时关闭它。
因此,在您的示例中,您将有一个服务类,例如,NewsService,其中将有一个方法createNews()。下面是一个骨架代码。我没有研究过语法,但是用代码的方式给出了一个想法。
public XXReturnXX createNews(){
Transaction tx = DAOHelper.createTx();
NewsDao newsDAO.insertNews(tx,..);
AuthorDAO authorDAO.insertAuthor(tx,..)
tx.commit()
}https://stackoverflow.com/questions/31324548
复制相似问题