充分利用EclipseLink的JDBC连接(Getting a JDBC connection f

2019-06-26 14:43发布

使用的EclipseLink如JPA 2.0提供商,我能够获得通过简单地调用的JDBC连接

Connection con = entityManager.unwrap(Connection.class);

但我不能确定什么,我负责。 我一定要收我提交查询后连接? 或者,我不能关闭连接,因为的EclipseLink也使用此连接内部。 或者它不关心,因为EclipseLink的观察我的行为,并自动关闭连接,如果我不这样做呢?

Answer 1:

如果你是在一个JPA事务上下文的连接将由供应商(的EclipseLink)进行管理。 如果你是在一个事务之外,你有责任管理自己的连接。

请参阅以下链接了解更多信息:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/EMAPI#Getting_a_JDBC_Connection_from_an_EntityManager



Answer 2:

但我不能确定什么,我负责。 我一定要收我提交查询后连接? 或者,我不能关闭连接,因为的EclipseLink也使用此连接内部。

一个很好的和有效的问题。 看来,文档缺乏的语义unwrap()调用。

有关EclipseLink,从我从有根据来源 :

的EclipseLink给你当前活动的引用 connection它使用当前活动的客户端会话事务 。 如果没有交易活跃, 新的将被创建 ,与会话相关联,并从返回unwrap()方法。

其结果是,IMHO,提交这样的得到的/回滚Connection可能导致未定义的行为和/或异常。 同样是执行DML从而改变记录已经由EclipseLink的内部缓存被先前缓存或用于其管理的实体存在的事实。
因此,使用此API时,尤其是在基础交易是肮脏的, 要小心

如果你能指内部的EclipseLink类,您可以访问EclipseLink的内部连接池获得一个Connection专用(看看org.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String) )。



文章来源: Getting a JDBC connection from EclipseLink