在纯 JPA 设置中获取数据库连接

2022-08-31 14:50:55

我们有一个 JPA 应用程序(使用休眠),我们需要将调用传递给需要 JDBC 数据库连接作为参数的旧版报告工具。有没有一种简单的方法来访问JDBC连接休眠设置?


答案 1

根据这里的文档,hibernate

连接连接()

已弃用。(计划在 4.x 中删除)。更换取决于需要;对于做直接的JDBC的东西使用doWork(org.hibernate.jdbc.Work)...

请改用休眠工作 API:

Session session = entityManager.unwrap(Session.class);
session.doWork(new Work() {

    @Override
    public void execute(Connection connection) throws SQLException {
        // do whatever you need to do with the connection
    }
});

答案 2

您想从哪里获得该连接尚不清楚。一种可能性是从 使用的底层休眠中获取它。在 JPA 1.0 中,您必须执行如下操作:SessionEntityManager

Session session = (Session)em.getDelegate();
Connection conn = session.connection();

请注意,getDelegate()不是可移植的,此方法的结果是特定于实现的:上面的代码适用于JBoss,对于GlassFish,您必须对其进行调整 - 看看在使用EntityManager.getDelegate()时要小心

在 JPA 2.0 中,情况会好一些,您可以执行以下操作:

Connection conn = em.unwrap(Session.class).connection();

如果在容器内运行,则还可以对已配置的 执行查找。DataSource


推荐