Hibernate транзакция не запущена - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 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)

Есть идеи, что не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...