在google-cloud-spanner-hibernate中切换只读事务和读写事务

Switch read-only transaction and read-write transaction in google-cloud-spanner-hibernate

我想切换read-write transaction and read-only transaction with google-cloud-spanner-hibernate

在 JPA 中,每个 Query 都设置了 LockMode,但不是每个 Transaction。 google-cloud-spanner-hibernate 中有什么方法可以控制它吗?

我找到了一个可能有帮助的解决方案 from the Hibernate forums。如果你使用的是原生 Hibernate,你可以这样做:

Session session = sessionFactory.openSession();
((SessionImplementor)session).connection().setReadOnly(true);
session.setHibernateFlushMode(FlushMode.MANUAL);

session.beginTransaction();

... do your work ...

session.commitTransaction();

这将使底层连接使用只读 Spanner 数据库事务。铸造操作似乎有点不寻常......我会跟进并询问 Hibernate 人员他们究竟推荐什么,但这至少可以是一种解决方法。您可以在 Spring HibernateTransactionManager 中看到类似的转换操作,所以这可能是常见的做法。

如果您使用 Spring,您将可以使用更优雅的方法 - @Transactional(readonly = true) 注释。更多信息 here.