在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.
我想切换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.