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

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

目录

1).直接在DataSource上设置

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

3).如果底层用的是eclipseLink的实现


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中设置

    
        
        
        
        
        
        
    

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

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

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

 

 

 

 

你可能感兴趣的:(JavaEE,Java,JPA,datasource)