如何在connection.release_mode(spring + hibernate)中设置不同的值然后'auto'

时间:2012-11-04 21:17:44

标签: java spring hibernate connection isolation-level

是否可以设置一个不同的值,然后将'auto'设置为hibernate propery - “connection.release_mode”?

我们使用Spring和hibernate,当我尝试在这个属性中定义 - 'after_transaction'(当我在会话工厂定义中定义hibernate属性时),在运行时我得到一个异常(Spring异常)唯一有效的值(在这个道具的弹簧术语是'on_close'。这个事实给我们带来了许多麻烦。我们使用session-per-request模式(意思是“客户端向服务器发送请求,Hibernate持久层正在运行.Hibernate打开一个新的Session,所有数据库操作都在这个工作单元中执行。”({ {3}})。当定义on_close时 - 每个服务正在分配连接(没有重用连接)。

我们使用HibernateTransactionManager与TransactionInterceptor一起管理事务。我们使用AnnotationSessionFactoryBean(我们的会话工厂)处理会话,我尝试在会话工厂中定义“hibernateProperties”部分中的decleration - > connection.release_mode = after_transaction。在服务器尝试加载会话工厂的运行时,我遇到了这个异常:

org.springframework.transaction.InvalidIsolationLevelException: HibernateTransactionManager is not allowed to support custom isolation levels: make sure that its 'prepareConnection' flag is on (the default) and that the Hibernate connection release mode is set to 'on_close' (SpringTransactionFactory's default). Make sure that your LocalSessionFactoryBean actually uses SpringTransactionFactory: Your Hibernate properties should *not* include a 'hibernate.transaction.factory_class' property!
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:515)
    ... 121 more

为什么春天这样做?并且有旁路

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

要设置不同的连接释放模式,您必须创建一个文件

src/main/resources/hibernate.properties

并设置值

hibernate.connection.release_mode=AFTER_STATEMENT

可以找到其他可用值here