gpt4 book ai didi

Java JDBC事务性多表插入

转载 作者:行者123 更新时间:2023-11-29 12:06:54 25 4
gpt4 key购买 nike

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

  • 新闻表:包含有关新闻的数据
  • 表作者:包含有关作者的数据
  • 两个表之间存在多对多关系,因此我们需要一个连接表;我们称之为 News_Authors_Junction_Table

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

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

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

这个问题有解决办法吗?

最佳答案

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

因此,在您的情况下,您将有一个服务类,例如 NewsService,其中您将有一个方法 createNews()。下面是一个框架代码。我还没有研究过语法,但将其以代码方式呈现给您一个想法。

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

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

tx.commit()
}

关于Java JDBC事务性多表插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com