gpt4 book ai didi

hibernate - Grails交易问题

转载 作者:行者123 更新时间:2023-12-03 08:03:50 25 4
gpt4 key购买 nike

我有一个Grails Service,它被标记为事务性的,它可以完成很多工作。

我正在向此方法添加代码,但没有获得我逐步执行时期望的结果:

  • 我有调用.save()的代码,在整个方法完成之前,该代码无法在MySQL后端中看到。考虑到服务方法是事务性的,这就是我所期望的。
  • 我还有其他调用.save()的代码,可以在服务方法完成之前在MySQL中看到它。我不明白这一点,也不明白这与1.之间的差异。
  • 我还有更多使用groovy.sql.Sql插入数据库的代码。我猜这在Grails事务处理之外,因此在方法结束之前提交的事实是有道理的。我可以让Grails在交易内部进行管理吗?

  • 请避免我的假设中出现任何错误。这是一些相关的代码:

    主要服务方法
    public void updateDb(Date date) {
    // Create the results
    if (createResults() > 0) {
    createA()
    createB()
    }
    }

    创建一个
    A a = new a()
    a.user = user
    a.week = week
    a.save()

    createB
    userWeek = new UserWeek(user: user)
    userWeek.number = 1
    userWeek.save(flush: true)

    createResults
    String insert = "insert into ..."
    Sql sql = new Sql(dataSource)
    sql.execute(insert)

    我添加了 flush:true使其刷新,但是我现在知道仅刷新 hibernate 状态,但实际上并不提交事务,因为它是事务性的。我究竟做错了什么?

    最佳答案

    您可以通过使用 groovy.sql.Sql constructor that takes a connection argument来使Sql在您的服务方法正在使用的事务中运行:

      Sql sql = new Sql(sessionFactory.currentSession.connection())

    这样可以解决在同一服务方法下的不同时间提交数据的问题。

    关于hibernate - Grails交易问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871705/

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