一尘不染

根据请求可变的事务隔离级别

hibernate

我正在编写一个小小的拍卖应用程序,因此务必要确定我的出价,这一点非常重要。毕竟,拍卖的最后几秒钟对买家来说是关键时刻,我不能冒险让他们同时竞标和拥有比赛条件。

当然,这就是事务隔离的目的。我可以将隔离级别设置为可序列化,并且一切就绪。

但是其他所有请求呢?如果人们正在查看个人资料或发送消息,则这些请求不需要这种事务隔离。对于这些请求,完全可以接受读取的提交隔离级别。

我将事务级别设置为我的hibernate属性的一部分hibernate.connection.isolation,但我真的很希望能够session.setTransactionIsolation(newIsolation)根据请求执行某些操作。


阅读 220

收藏
2020-06-20

共1个答案

一尘不染

Session session = getSession(dataSource, sessionFactory, Connection.TRANSACTION_SERIALIZABLE);

public Session getSession(DataSource dataSource, SessionFactory sessionFactory, int isolationLevel){

  // Get connection from current dataSource and set new isolation
  Connection connectionWithNewIsolation = dataSource.getConnection();
  connectionWithNewIsolation.setTransactionIsolation(isolationLevel);

  // Get session from current sessionFactory with the new isolation
  Session session = sessionFactory.openSession(connectionWithNewIsolation);

  // Hibernate 4.3
  //SessionFactory.openStatelessSession(Connection connection)
  // Hibernate 3.6
  //SessionFactory.openSession(Connection connection)
  //SessionFactory.openStatelessSession(Connection connection)

  return session;
}
2020-06-20