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

Grails:groovy.sql.Sql和Model.withTransaction会发生什么?

方英耀
2023-03-14

Grails GORM with Transaction和groovy。sql。如果我将存储过程的Sql调用放入带事务的Sql中,Sql将使用相同的连接?例如:

假设我有一个命令:

@Validateable
class MyCommand {
  List<MyModel> listOfModel
}

然后我有一个服务来处理这个命令

class MyService {
  def dataSource

  def handleCommand( MyCommand command ) {
    MyModel.withTransaction { status ->
      for( MyModel m : command.listOfModel ) {
         if( !m.save() ) {
           status.setRollbackOnly()
           throw new MyException(m.errors)
         }
      }

      //now I need to call a stored proc. This will use the same connection?
      //withTransaction will commit the call?
      Sql s = new Sql(dataSource)
      s.call('my_stored_proc')
    }
  }

}

共有1个答案

刘昌翰
2023-03-14

我已经找到了如何做到这一点。

def sessionFactory

//after GORM saves...  
sessionFactory.currentSession.flush()
Sql s = new Sql( sessionFactory.currentSession.connection()  )
s.call()

本主题中的更多信息。

 类似资料:
  • 嗨,一个星期以来,我一直在追踪我的办公代码中的一个错误。它与Spring、Hibernate和Transaction有关。 我所知道的: 1.延迟加载。 2. Spring如何使用代理和拦截器进行事务管理。 3. Spring中的事务传播,我们的代码使用默认的REQUIRED。 4.每个请求/会话的会话和Hibernate的分离实体基础来保持会话,以及我们的会话不是每个会话的事实。 我的场景:我的

  • 问题内容: 我想知道当你使用注释方法时实际发生了什么?当然,我知道Spring将把该方法包装在Transaction中。 但是,我有以下疑问: 听说Spring创建了代理类?有人可以更深入地解释这一点。该代理类中实际包含什么?实际班级会怎样?我怎么能看到Spring创建的代理类 我还在Spring文档中读到: 注意:由于此机制基于代理,因此仅会拦截通过代理传入的“外部”方法调用。这意味着“自调用”

  • 问题内容: 假设我有一个查询发送到我的SQL-Server数据库,它花费了30秒钟以上,并且我的程序引发了SQL Query Timeout异常。查询是否仍然在我的数据库中徘徊,或者在引发异常后立即终止? 问题答案: 客户端使用注意事件向服务器发出查询超时信号。注意事件只是SQL Server客户端可以发送给它的TDS数据包的一种不同类型。除了连接/断开连接,T-SQL批处理和RPC事件外,客户端

  • 死锁描述了另外两个线程因为永远等待对方而被阻塞的情况。当死锁发生时,程序永远挂起,你唯一能做的就是杀死程序。 为什么在下面给出的示例生产者-消费者问题中没有发生死锁: 我想知道为什么当同步对象正在等待其他线程释放锁时,在同步块中调用等待方法不会导致死锁?

  • 问题内容: 有人可以提供goroutine返回的澄清值。从goroutine返回的值是否已存入抵押。 例如: 我们是否应该避免在go例程中避免返回值? 问题答案: 快速查看一下组装输出显示 该函数确实将其结果存储到堆栈中 因此,当从goroutine调用它时,它会将结果存储到堆栈中。但是,这是一个新的堆栈,当goroutine结束时,该堆栈会被破坏,因此无法获取返回值。 但是,无法检索这些结果。

  • 问题内容: 我知道从线程调用是一个坏主意。但是,如果线程使用创建新进程,将会发生什么? 新进程将是创建线程的主线程的子进程。我认为。 如果其父级先完成,则新进程将附加到init进程中。它的父级是主线程,而不是创建它的线程。 如果我错了,请纠正我。 问题答案: 新进程将是创建线程的主线程的子进程。我认为。 创建一个新的过程。一个进程的父进程是另一个进程,而不是线程。因此,新流程的父级是旧流程。 请注