JPA中几种比较好的设置数据库连接事务隔离级别的方法

来源:互联网 发布:微信点餐系统源码php 编辑:程序博客网 时间:2024/06/05 11:34

在使用JPA时,有时候需要设置连接的事务隔离级别,以下几种方法可供参考。

1). 直接在DataSource上设置
DataSource source = (javax.sql.DataSource) jndiCntxt.lookup("java:comp/env/jdbc/myds");Connection con = source.getConnection( );con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
如果DataSource是在spring中配置的,则可以在spring中设置
    <bean id="gf.dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="${jdbc.driverClassName}"/>        <property name="url" value="${jdbc.url}"/>        <property name="username" value="${jdbc.username}"/>        <property name="password" value="${jdbc.password}"/>        <property name="maxTotal" value="${jdbc.maxConn}"/>        <property name="DefaultTransactionIsolation" value="1"/>    </bean>

2).如果底层用的是Hibernate的实现:

org.hibernate.Session session = (Session)entityManager.getDelegate();Connection connection = session.connection();connection.setTransactionIsolation(Connection.READ_UNCOMMITTED);

3).如果底层用的是eclipseLink的实现:
import org.eclipse.persistence.sessions.DatabaseLogin;import org.eclipse.persistence.sessions.Session;import org.eclipse.persistence.sessions.factories.SessionCustomizer;public class DFSessionCustomizer implements SessionCustomizer {        @Override        public void customize(Session session) throws Exception {            DatabaseLogin databaseLogin = (DatabaseLogin) session.getDatasourceLogin();            databaseLogin.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_COMMITTED);        }}
在persistence.xml中设置SessionCustomizer

<property name="eclipselink.session.customizer" value="com.filip.blabla.DFSessionCustomizer"/>

另外,直接设置java.sql.Connection是不行的:

java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);connection.setTransactionIsolation(java.sql.Connection.TRANSACTION_READ_COMMITTED);


0 0
原创粉丝点击