Java JDBC事务多表插入

时间:2015-07-09 17:37:55

标签: java mysql hibernate jdbc

我们假设我们的数据库结构如下:

  • 表新闻:包含有关新闻的数据
  • table作者:包含有关作者的数据
  • 两个表之间的
  • 我们有多对多的关系,所以我们需要一个联结表;我们称之为News_Authors_Junction_Table

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

现在出现了问题。考虑到当我们必须插入新闻时,我们还必须插入作者。这意味着我们需要一个交易。

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

这个问题有解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

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

public XXReturnXX createNews(){
     Transaction tx = DAOHelper.createTx();

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

     tx.commit()
}