您的位置:首页 > 数据库

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

2016-01-21 10:52 399 查看
在使用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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javaee JPA