首页 > 解决方案 > 从实体管理器获取连接

问题描述

我们正在尝试从 EntityManager 获取连接对象

下面是示例代码

  final Session unwrap = proxy.unwrap(Session.class);
        unwrap.doWork(new Work()
        {
            @Override
            public void execute(Connection connection) throws SQLException
            {
                PreparedStatement ps = connection.prepareStatement(MY_QUERY);
                for (Object value : valueSet)
                {
                    ....
                    ....
                    ps.addBatch();
                }
                try
                {
                    int[] ints = ps.executeBatch();

                } finally
                {
                    ps.close();
                }
            }
        });

这很好用。

我们担心的是,当调用此代码时,每次都会在 DataSource 上调用 getConnection。这是否意味着从池中获得了新连接?

这对我们的用例有性能影响。我们的理解是,将使用当前的活动连接。

理解不正确?

标签: javahibernatedatabase-connection

解决方案


休眠文档说:

控制器,用于允许用户使用此 Session 管理的 Connection 执行 JDBC 相关工作。

所以它是会话使用的(单个)连接。其他一切都将是一个错误。


推荐阅读