首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java事务性多表插入

问Java事务性多表插入
EN

Stack Overflow用户
提问于 2015-07-09 17:37:55
回答 1查看 604关注 0票数 0

让我们考虑一下,我们有一个结构如下的数据库:

  • 表新闻:包含有关新闻的数据
  • 表作者:包含有关作者的数据
  • 在这两个表之间,我们有一个多到多的关系,所以我们需要一个连接表;让我们称之为News_Authors_Junction_Table。

假设每个重要表都有一个DAO : NewsDAO,AuthorsDAO。每个DAO都有一个insert方法。在insert方法开始时,获取连接,然后关闭连接。另外,假设我们有一个连接管理器类,它处理到数据库的连接,并使用Singleton模式进行连接。基本上每次返回相同的连接。

现在问题来了。想一想,当我们必须插入新闻,我们也必须插入到作者。这意味着我们需要一笔交易。

在NewsDAO插入方法中,我们获取连接,将它的自动提交设置为false,调用AuthorsDAO插入方法,将连接的自动提交设置为true,然后关闭连接。但是,正如我前面提到的,在每个insert方法中,我们获取连接,然后关闭它。因为我们在另一个insert方法中有一个insert方法,所以连接在内部insert方法中是关闭的。

这个问题有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 17:48:40

您可以做的是,将事务管理从DAO中移出。编写一个服务层,它将封装所有DAO调用,并在服务方法开始时启动事务,并在结束时关闭它。

因此,在您的示例中,您将有一个服务类,例如,NewsService,其中将有一个方法createNews()。下面是一个骨架代码。我没有研究过语法,但是用代码的方式给出了一个想法。

代码语言:javascript
复制
public XXReturnXX createNews(){
     Transaction tx = DAOHelper.createTx();

     NewsDao newsDAO.insertNews(tx,..);
     AuthorDAO authorDAO.insertAuthor(tx,..)

     tx.commit()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31324548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档