不推荐使用的休眠 getSession().connection() 的替代方案

Posted

技术标签:

【中文标题】不推荐使用的休眠 getSession().connection() 的替代方案【英文标题】:Alternative of deprecated hibernate getSession().connection() 【发布时间】:2013-03-05 07:21:19 【问题描述】:

在使用 HibernateDaoSupport 类时,我发现 getSession().connection();已弃用。

请问还有什么方法可以代替这个

【问题讨论】:

这个问题在这里得到了相当彻底的讨论。 ***.com/questions/8770459/… 【参考方案1】:

现在我们必须使用session.doWork() API:

session.doWork(
        new Work() 
            public void execute(Connection connection) throws SQLException 
             
                doSomething(connection); 
            
        
    );

另请参阅:session.connection() deprecated on Hibernate?

【讨论】:

您帖子的最后一行足以添加为问题的评论,而不是发布新答案。除了 API 链接之外没有什么新东西。 @NayanWadekar 感谢您的关注。如果您看到该链接,则有 4 到 5 种获取连接对象的方法。但是我上面写的那个看起来更好(根据我在阅读所有可能性后的理解)。 我认为,一个小的绿色勾号和投票数足以将可能性降到最低。【参考方案2】:

我找到了以下解决方法,无需任何弃用即可获得 Session 的连接。我很确定 Hibernate 的人不会允许这样做。

private static class WorkAround implements org.hibernate.jdbc.Work 
    private Connection conn = null;

    @Override
    public void execute(Connection conn) throws SQLException 
        this.conn = conn;
    

    public Connection getConnection() 
        return conn;
    



public static Connection getConnection(Session session) 
    WorkAround wrk = new WorkAround();
    session.doWork(wrk);
    return wrk.getConnection();

我想在此处发布此答案:session.connection() deprecated on Hibernate?,但我知道我不允许这样做。

【讨论】:

【参考方案3】:

你可以使用 org.hibernate.internal.SessionImpl;

import org.hibernate.internal.SessionImpl;
public static class WorkAround 
    public Connection getConnection(Session session)
            SessionImpl sessionImpl = (SessionImpl) session;
            return session.connection()
    

【讨论】:

以上是关于不推荐使用的休眠 getSession().connection() 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

如何在休眠中提交批量插入?

如何在休眠中使用 CreateSqlQuery 查询不同的数据库?

BoneCP 和休眠

如何在休眠中处理多个会话事务提交和回滚?

将休眠查询的结果转置为 POJO 列表

在通用 DAO 中获取当前对象 ID。休眠