gpt4 book ai didi

grails - 从服务返回后数据未保留

转载 作者:行者123 更新时间:2023-12-02 14:50:42 24 4
gpt4 key购买 nike

让我先说我的代码昨天还在工作。我将我的提交回滚到它工作的时间。

唯一不同的是今天运行了迁移以从某些表中删除某些列。我看不出这会如何影响它

我正在执行 google oauth 身份验证,并且在来自 google 的回调 url 中,我正在执行大量保存/更新/等操作。我的 Controller 调用一个可以完成所有操作的服务。如果我在 return 语句所在的断点处查询数据,我可以看到数据。没有异常(exception)、验证错误或任何会让我相信任何错误的事情。有任何想法吗?

class MyController {

def myService

def callback() {
myService.update()
//At this point when I run X.get(1) it is returning null
redirect uri: "..."
}
}

@Transactional
class MyService {

def update() {
...
//If I break at this return statement I can run X.get(1) and it returns
return someData;
}
}

编辑:我找到了原因,但我不明白这是怎么发生的。我最终调用 userDetailsService.loadUserByUsername .该方法正在抛出 NoStackUsernameNotFoundException .我在我的代码中捕获了该异常,但是无论如何它都会导致事务回滚。

最佳答案

事务期间抛出的任何异常,即使你捕获并处理它,也会导致事务回滚。

为了解决这个问题,您有几个选择:

  • 在引发异常之前执行检查,并且不要在您知道它会引发异常的情况下执行违规代码
  • 自己处理事务 -

  • 在您的服务中,设置
    static transactional = false

    然后声明你自己的事务 block :
    MyDomain.withTransaction { tx ->
    try {
    userDetailsService.loadUserByUsername(...)
    } catch (NoStackUsernameNotFoundException e) {
    log.warn("Can't load user...")
    }

    //stuff you try to persist here will
    //be written to the database successfully
    //despite the NoStackUsernameNotFoundException
    //being thrown & caught
    }

    关于grails - 从服务返回后数据未保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31174530/

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