Я хочу использовать управление транзакциями из Kundera (V3.2) для моей базы данных Cassandra. Ссылаясь на https://github.com/impetus-opensource/Kundera/wiki/Transaction-Management, эту функциональность можно использовать. Я написал следующий код:Сделки в kundera-cassandra
public void update(Account entity){
EntityManager manager = this.entityManagerFactory.createEntityManager(getProperties());
manager.setFlushMode(FlushModeType.COMMIT);
manager.getTransaction().begin();
try{
String queryStringNative = "UPDATE account SET value = 20 WHERE id = 'xxx' IF value = 10";
Query query = manager.createNativeQuery(queryStringNative);
query.executeUpdate();
String queryStringNative1 = "UPDATE account SET value = 30 WHERE id = 'yyy' IF value = 40";
Query query1 = manager.createNativeQuery(queryStringNative1);
query1.executeUpdate();
//commit
manager.getTransaction().commit();
} catch(Exception e){
manager.getTransaction().rollback();
}
manager.clear();
manager.close();
}
Но когда я имитировать ошибку во втором запросе откат не работает, и учетная запись с идентификатором «хой» обновляется.
Итак, мой вопрос, можно ли вообще использовать реализацию транзакции от Kundera для kundera-cassandra?
EDIT:
я узнал, что Кундера использует EventLogQueue для выполнения отката или фиксации. Он читает события, которые находятся в очереди, и откатывает эти события. Проблема заключается в том, что EventQueue получает только события, которые отправляются вызовом метода EntityManager.persist(), EntityManager.remove() или EntityManager.merge(). Таким образом, при выполнении собственного запроса нет записи.
Спасибо за ваш ответ. Я понимаю причину. Плохо, комбинация управления транзакциями кундеры и легких транзакций из кассандры была бы приятной особенностью. Но это нельзя использовать, потому что Kundera не поддерживает легкие транзакции по их методу persist. –
@ K.E. Да .. это потому, что мы поддерживаем формат JPA для запросов, и нет интерфейса для предоставления легких транзакций, специфичных для cassandra. Это два разных мира .. надеюсь, вы понимаете :) –
Да, я понимаю, спасибо! –