2015-10-05 2 views
1

Я заменяю Hibernate 4 на Hibernate 5 и теперь сталкиваюсь с проблемой с метаданными соединения. Фрагмент кода:Hibernate 5: как передать метаданные соединения в DialectresolutionInfo

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; 
} 

Этот фрагмент кода компилирует, но дает мне java.lang.ClassCastException: com.mchange.v2.c3p0.impl.NewProxyDatabaseMetaData не может быть приведен к org.hibernate.engine.jdbc. dialect.spi.DialectResolutionInfo.

Есть ли правильный способ сделать это? Hibernate 4 работал без меня.

спасибо.

+0

Проблемы решаются autowirin g SessionFactory и с помощью Dialect. – maksim2020

ответ

0

У меня была аналогичная проблема при обновлении до 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())); 
Смежные вопросы