JPA中几种比较好的设置数据库连接事务隔离级别的方法
2016-01-21 10:52
399 查看
在使用JPA时,有时候需要设置连接的事务隔离级别,以下几种方法可供参考。
1). 直接在DataSource上设置
2).如果底层用的是Hibernate的实现:
3).如果底层用的是eclipseLink的实现:
<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);
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通过response实现请求重定向
- JavaEE实现文件下载
- JavaEE中关于ServletConfig的小结
- JavaEE实现前后台交互的文件上传与下载
- 解析JPA的视图查询问题
- Hibernate的学习笔记(4)
- Hibernate的学习笔记(5)
- Spring 4 with JPA (Hibernate 4/EclipseLink)
- EJB3 事务控制
- JPA复杂实体关系的构建
- Struts2学习整理
- JPA实体代码生成器
- JPA查询返回子句
- 初步认识JPA
- Tomcat 部署JAVAEE项目
- JAVAEE之Servlet
- Ubuntu下搭建JavaEE开发环境
- javaee 部分jar包的作用
- hibernate jpa 注解 @Temporal(TemporalType.DATE) 日期注解