休眠事务未启动

时间:2019-06-09 07:46:36

标签: spring hibernate jdbc locking

我有一个API,需要执行以下操作:

  1. 接受并发请求并以它们到达时的顺序执行它们,确保一次只执行/提交一个请求。

  2. 请求应单独执行,因此当第一个请求提交到数据库时,第二个请求应等待,并且在第一个请求完成时,第二个请求应使用此更新的数据。

我的代码可以完成上述操作

@Synchronized
@Transactional(
    readOnly = false,
    isolation = Isolation.READ_COMMITTED,
    propagation = Propagation.REQUIRED,
    rollbackFor = Exception.class
)
myApi() {
    def currentSession = sessionFactory.currentSession
    def transaction = currentSession.beginTransaction()
    String query = """update table set column = :value"""
    Map params = [value: "value"]
    currentSession.doWork(new Work() {
        public void execute(Connection connection) {
            Sql sql = new Sql(connection)
            int updateCount = sql.executeUpdate(params, query)
        }
    })
    transaction.commit()
}

有趣的是,我上面的代码做了我想要的事情,它引发了以下错误:

| Error org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: Transaction not successfully started
| Error     at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:665)
| Error     at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
| Error     at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
| Error     at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:150)

知道发生了什么事吗?

0 个答案:

没有答案