Java Hibernate SessionFactory,动态设置TransactionIsolationLevel

Java Hibernate SessionFactory,动态设置TransactionIsolationLevel,java,hibernate,jdbc,Java,Hibernate,Jdbc,所以 hibernateSessionFactory可用 现在,在java.sql.Connection上有一个方法Connection.setTransactionIsolation 现在,从sessionFactory可以openSession(),或getCurrentSession() 从那里,我们可以做到: session.doWork(connection->{…connection.setTransactionIsolation…}) 然而,我的记忆告诉我,这已经太晚了 实际上,在

所以

hibernate
SessionFactory
可用

现在,在
java.sql.Connection
上有一个方法
Connection.setTransactionIsolation

现在,从sessionFactory可以
openSession()
,或
getCurrentSession()

从那里,我们可以做到:

session.doWork(connection->{…connection.setTransactionIsolation…})

然而,我的记忆告诉我,这已经太晚了

实际上,在创建
会话
之前,很可能需要执行
连接.setTransactionIsolation

这不是真的吗

此外,
setReadOnly
具有相同的要求

现在,要在创建会话之前获得连接,有以下答案:

但这需要
数据源

那么是否有一个,可以从
SessionFactory
获取
数据源
,这样我就可以从我目前拥有的数据创建这个逻辑

编辑

尊敬的是,不要说出S.p.R.I.N.G或A.N.N.O.T.A.T.I.O.N.S.

这个“事务隔离”属性有一个“连接”级别,这就是为什么在创建连接时必须应用它,而不是在事务级别,或者在SessionFactory上(就像所有连接的一般规则一样)

考虑到您正在尝试做的事情,您实际上有两个不同的选项来设置事务隔离

最常用、最干净、最推荐的方法是通过设置特定的hibernate属性,如以下内容:

<property name="hibernate.connection.isolation">2</property>
请记住,上述方法是一种相当肮脏的方法,并不能保证它有效。此外,
org.hibernate.Session
的方法
connection()
已被弃用,因此您不应该使用它

但是,我个人使用了一些单元测试(作为一个实验),它工作得很好。

事务隔离属性有一个“连接”级别,这就是为什么在创建连接时必须应用它,而不是在事务级别,或者在SessionFactory上(像所有连接的一般规则一样)

考虑到您正在尝试做的事情,您实际上有两个不同的选项来设置事务隔离

最常用、最干净、最推荐的方法是通过设置特定的hibernate属性,如以下内容:

<property name="hibernate.connection.isolation">2</property>
请记住,上述方法是一种相当肮脏的方法,并不能保证它有效。此外,
org.hibernate.Session
的方法
connection()
已被弃用,因此您不应该使用它


但是,我个人使用了一些单元测试(作为一个实验),它工作得很好。

是的,connection()方法已经不存在了,但是因为它对您有效,所以doWork在这里应该工作得很好。否则,我可能会转换到SessionImpl,我想目标是在实际创建事务之前进行转换。我知道全局设置,我只是尝试为每个事务/连接启用它,而不是全局设置。在问题描述中的链接中,他们实际上是在创建会话之前设置这些属性。我不确定现在是不是太晚了。是的。事实上,我可以这样做,因为在我的公司,我们仍然使用hibernate core 3.3.1GA,而且该方法已经存在,尽管不推荐使用。比方说,我仍然准时并且很幸运地以编程的方式完成了它:)是的,connection()方法已经不存在了,但是因为它对您有效,所以doWork在这里应该可以正常工作。否则,我可能会转换到SessionImpl,我想目标是在实际创建事务之前进行转换。我知道全局设置,我只是尝试为每个事务/连接启用它,而不是全局设置。在问题描述中的链接中,他们实际上是在创建会话之前设置这些属性。我不确定现在是不是太晚了。是的。事实上,我可以这样做,因为在我的公司,我们仍然使用hibernate core 3.3.1GA,而且该方法已经存在,尽管不推荐使用。比方说,我仍然按时完成了任务,并且很幸运地以编程方式完成了任务:)