Hibernate 4.1到5.1 SessionFactory ConnectionProvider

时间:2017-06-02 13:46:50

标签: java hibernate java-ee

如何从hibernate 5中的会话工厂获取连接提供程序?获取连接的方法不再存在,并且不会被javadoc中的任何内容替换。此代码段在4.1中有效,但在5.1中则没有(具体而言,getConnectionProvider()不存在)。

private SessionFactory factory;


private ServletOutputStream outputStream;

private ServletContext context;

public Object execute(Map properties) {
    InputStream input = null;
    try {
        Session session = factory.getCurrentSession();

        SessionFactoryImplementor sessionFactoryImplementation = (SessionFactoryImplementor) session.getSessionFactory();
        ConnectionProvider connectionProvider = sessionFactoryImplementation).getConnectionProvider();
        Connection conn = connectionProvider.getConnection(); 

2 个答案:

答案 0 :(得分:1)

对于hibernate 5.2.10,试试这个:

public Connection getConnection(){        
    try {
        return ((SessionImplementor) sessionFactory).getJdbcConnectionAccess()
                .obtainConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}  

见:

Hibernate - Deprecated API

Docs Hibernate 4.1 - SessionFactoryImplementor.getConnectionProvider()

答案 1 :(得分:0)

正如Allinger Medeiros所说,ConnectionProvider在Hibernate 4中已弃用,在Hibernate 5中不可用。 但是,正如Gwaptiva指出的那样,他的解决方案导致ClassCastException。

这对我有用:

JdbcConnectionAccess connectionAccess = 
    ((SessionImplementor)sessionFactory.getCurrentSession())
    .getJdbcConnectionAccess();