Java Hibernate 5:如何转换连接&x27;将元数据转换为方言解析信息

Java Hibernate 5:如何转换连接&x27;将元数据转换为方言解析信息,java,hibernate,hibernate-4.x,hibernate-5.x,Java,Hibernate,Hibernate 4.x,Hibernate 5.x,我确实将Hibernate4替换为Hibernate5,现在面临连接元数据的问题。代码片段是: public long getNext(final String sequenceName) { ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() { @Override public Long execute(Connection connection) t

我确实将Hibernate4替换为Hibernate5,现在面临连接元数据的问题。代码片段是:

public long getNext(final String sequenceName) {
    ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() {
        @Override
        public Long execute(Connection connection) throws SQLException {
            DialectResolver dialectResolver = new StandardDialectResolver();
            >>>>> problem is here >>>>>> Dialect dialect =  dialectResolver.resolveDialect((DialectResolutionInfo)connection.getMetaData());
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            try {
                preparedStatement = connection.prepareStatement( dialect.getSequenceNextValString(sequenceName));
                resultSet = preparedStatement.executeQuery();
                resultSet.next();
                return resultSet.getLong(1);
            }catch (SQLException e) {
                throw e;
            } finally {
                if(preparedStatement != null) {
                    preparedStatement.close();
                }
                if(resultSet != null) {
                    resultSet.close();
                }
            }

        }
    };
    Long maxRecord = databaseUtilities.getSession().doReturningWork(maxReturningWork);
    return maxRecord;
}
public long getNext(最终字符串sequenceName){
ReturningWork maxReturningWork=新ReturningWork(){
@凌驾
公共长执行(连接)引发SQLException{
方言分解器方言分解器=新标准方言分解器();
>>>>>问题出在这里>>>>>>方言方言=方言解析程序.resolvealty((方言解析信息)connection.getMetaData());
PreparedStatement PreparedStatement=null;
ResultSet ResultSet=null;
试一试{
preparedStatement=connection.prepareStatement(方言.getSequenceNextValString(sequenceName));
resultSet=preparedStatement.executeQuery();
resultSet.next();
返回结果集getLong(1);
}捕获(SQLE异常){
投掷e;
}最后{
if(preparedStatement!=null){
preparedStatement.close();
}
if(resultSet!=null){
resultSet.close();
}
}
}
};
Long maxRecord=databaseUtilities.getSession().doReturningWork(maxReturningWork);
返回maxRecord;
}
这段代码可以编译,但给了我一个java.lang.ClassCastException:com.mchange.v2.c3p0.impl.NewProxyDatabaseMetaData无法转换为org.hibernate.engine.jdbc.dialen.spi.dialenResolutionInfo

有没有正确的方法可以做到这一点?Hibernate 4在没有演员阵容的情况下为我工作


谢谢。

我在升级到Hibernate 5时遇到了类似的问题。特别是我的stacktrace将显示:

org.apache.tomcat.dbcp.dbcp2.DelegatingDatabaseMetaData 
cannot be cast to org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo
通过导入以下适配器,可以轻松执行该转换:

import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
并将标记为有问题的行替换为以下行:

Dialect dialect =  dialectResolver.resolveDialect(
               new DatabaseMetaDataDialectResolutionInfoAdapter(connection.getMetaData()));

我在升级到Hibernate 5时遇到了类似的问题。特别是我的stacktrace将显示:

org.apache.tomcat.dbcp.dbcp2.DelegatingDatabaseMetaData 
cannot be cast to org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo
通过导入以下适配器,可以轻松执行该转换:

import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
并将标记为有问题的行替换为以下行:

Dialect dialect =  dialectResolver.resolveDialect(
               new DatabaseMetaDataDialectResolutionInfoAdapter(connection.getMetaData()));

问题是通过自动连接SessionFactory并从中提取方言来解决的。问题是通过自动连接SessionFactory并从中提取方言来解决的。