当前位置: 首页 > 知识库问答 >
问题:

在运行功能中,oracle数据库中的数据未更新

荀嘉熙
2023-03-14

从一个方法call AndUpdateInB(),假设我正在调用B类(@Component)的date()方法,其中我正在调用myRepository.save()方法来更新db中的一些数据,并且在相同的功能中我正在执行一些其他调用...然后将响应返回给类A。

所以问题是,当类B方法update()将响应返回给类A方法callAndUpdateInB()时,数据在数据库中得到更新。但当我调用myRepository时,它应该已经更新了。在类B()的更新方法中保存()。

为何如此?

仅供参考,请参见此虚拟示例

class A{

    @Autowired
    B b;

    public void callAndUpdateInB(String arg){

        String data = b.update(arg);

        //    check Updates in Db (True)
        //    Now data is updated in db
    }
}  

@Component
class B{

    @Transactional(
    propagation = Propagation.REQUIRED
    )
    public String update(String arg){
        MyRepository myRepository; //  This is abstract class having 
                                   //  imlementation for the following 
                                   //  data. (MyRepositoryImpl)
        String updatedData = myRepository.save(arg);

        //    check Updates in Db (False)
        //    Making some other calls, which need that updated data
        //    But data is not still updated in db.
        //    Though here the updated data field is showing that the data is updated, but it 
        //    is not actually updated in the db.

        return updatedData;
    }
}  

共有2个答案

袁成化
2023-03-14

需要传播

  • 支持当前事务,如果不存在,则创建新事务。类似于同名的EJB事务属性

并在带注释的方法结束时保持事务未提交和活动。

如果您在请求处理的最开始调用您的date()两次,第一次启动一个事务,第二次重用它。如果您调用您的date()两次,一次成功,另一次失败(在唯一约束或其他方面),这两个更改都将回滚。

开发人员通常期望事务以这种方式开始和结束。但在某些情况下,需要独立于其他更改提交/回滚更改。如果是您的情况,您可以使用传播。需要新的:请参阅https://stackoverflow.com/a/24341843/12656244

弓泰
2023-03-14

如果方法更新成功完成,事务将提交到数据库。

因此,在方法返回之前,您无法看到数据。

此外,保存不会执行插入/更新语句。这也将在事务提交之前发生。

如果您想在调用saveAndFlush()之前执行这些语句。但是也不会提交该事务,并且从另一个事务中也不会看到该数据。

这是Spring应用程序中使用事务的常见和预期的事务行为。

 类似资料:
  • 本文向大家介绍jdbc连接oracle数据库功能示例,包括了jdbc连接oracle数据库功能示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jdbc链接oracle数据库功能。分享给大家供大家参考,具体如下: 希望本文所述对大家java程序设计有所帮助。

  • 问题内容: 我们每个午夜从CI运行Junit ans Selenium测试用例。我们正在使用Maven-SQL插件预先填充数据,如下所示。 由于不同用户同时进行构建,我们经常面临数据库僵局。我们认为的解决方案是在运行数据库脚本之前锁定数据库。 我们可以在运行脚本之前锁定数据库访问,然后在运行脚本之后解锁数据库访问吗? 问题答案: 共享数据库进行测试从来都不是一个好主意,想必您知道这一点,这就是为什

  • 本文向大家介绍Python中的Oracle数据库连接,包括了Python中的Oracle数据库连接的使用技巧和注意事项,需要的朋友参考一下 Python可以使用名为cx_Oracle的python软件包连接到oracle。Oracle是著名且广泛使用的数据库之一,而python的数据处理功能可以很好地利用这种连接性。在本文中,我们将看到如何连接到oracle数据库和查询数据库。 安装cx_Orac

  • 我是Oracle数据库的新手。我已经安装了DBeaver(以前也从未使用过)来连接数据库。 我已经创建了一个连接(我相信它被称为数据库),现在我能够看到数据库表和所有内容。如何在DBeaver中备份Oracle数据库,以便在对live Database进行任何更改之前在本地使用它进行测试? 我找不到任何选择采取连接/数据库的备份。

  • 问题内容: 我想在进行Web服务调用之前检查数据库中是否已记录的记录。 这是我想像的查询形式,我似乎无法弄清楚语法。 有没有办法做到这一点?这样的查询叫什么? 我想将ID的列表传递给mysql,并希望它吐出数据库中尚未存在的ID? 问题答案: 为了确认我已正确理解,您想传递一个数字列表,并查看现有表中 不 存在哪些数字?有效: 您似乎可以随时建立此查询,在这种情况下,可以通过将上面的代码更改为 尽

  • 我已经写了功能文件,我已经使用了示例关键字。其中一个输入没有传递到输入字段。 提供了多个用户名和密码,许多用户应该能够登录到newtours 场景大纲:使用凭据登录到帐户 给定用户导航到“ 和用户单击注册按钮 然后用户输入“”名字 然后用户输入“”lastname 和用户输入“”电话 然后用户输入“”emailaddress 和用户输入“”地址 和用户输入“”城市 并且用户进入“”状态 用户输入“