在google云扳手hibernate中切换只读事务和读写事务

在google云扳手hibernate中切换只读事务和读写事务,hibernate,google-cloud-spanner,Hibernate,Google Cloud Spanner,我想和你交换 在JPA中,为每个查询设置锁定模式,但不为每个事务设置。在google cloud Paner hibernate中有什么方法可以控制它吗?我找到了一个可能有用的解决方案。如果您使用的是本机Hibernate,则可以执行以下操作: Session session = sessionFactory.openSession(); ((SessionImplementor)session).connection().setReadOnly(true); session.setHibern

我想和你交换

在JPA中,为每个
查询设置
锁定模式
,但不为每个
事务设置
。在google cloud Paner hibernate中有什么方法可以控制它吗?

我找到了一个可能有用的解决方案。如果您使用的是本机Hibernate,则可以执行以下操作:

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

session.beginTransaction();

... do your work ...

session.commitTransaction();
这将使基础连接使用只读扳手数据库事务。铸造操作似乎有点不寻常。。。我将跟进并询问Hibernate人员他们的建议,但这至少是一个解决办法。你可以在春天看到类似的铸造操作,所以这可能是常见的做法


如果您使用的是Spring,那么您将可以访问一个更优雅的方法--
@Transactional(readonly=true)
注释。更多信息。

当您声明“我想用google cloud Paner hibernate切换读写事务和只读事务”时,您能详细说明一下吗?你在这里要求什么还不清楚。好的,我是说1。是否有任何配置来控制事务模式?2.有没有办法在运行时动态切换它?您是否在询问是否有可能在执行期间更改事务的模式?或者,您是否在询问,在事务执行期间,是否调用并执行了第二个事务,然后执行返回到要完成的第一个事务?请记住,事务是原子的。这意味着要么一个事务中的所有操作都得到执行,要么一个都没有。非常感谢!很高兴听到只有强制转换到
SessionImplementor
(即Hibernate感知但不支持扳手感知的impl)才能实现这一点!NP如果您需要更多帮助,请随时向扳手hibernate方言repo提问并发布问题: