SQLGrammarException: не удалось получить список предлагаемых стратегий идентификации из базы данных (сопоставление SQL-Server Latin1_General_BIN)

Я создал новый модуль сохраняемости в RapidClipse (Eclipse Neon с включенными плагинами Hibernate [и другими]), используя новый профиль подключения к SQL-Server 2014. "Тестовое подключение" работает нормально - "Пинг успешно завершен!".

В следующем диалоговом окне "Создать объекты из таблиц -> Выбрать таблицы" отображаются все таблицы, но при выборе одной из них и использовании "Создать объекты из таблиц -> Связи таблиц" происходит сбой:

Спящие метаданные о сопоставлении BIN

Это происходит только при использовании сортировки с учетом регистра - база данных использует "Latin1_General_BIN", если я переключаю ее на "Latin1_General_CI_AS", в спящем режиме не отображаются какие-либо проблемы со стратегиями идентификации, но я не могу изменить параметры сортировки базы данных на рабочем сервере.

Вопрос: Есть ли способ исправить "Не удалось получить список предлагаемых стратегий идентификации из базы данных". ошибка без изменения параметров сортировки?

Трассировки стека:

org.hibernate.exception.SQLGrammarException: Could not get list of suggested identity strategies from database. Probably a JDBC driver problem. 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.cfg.reveng.dialect.SQLServerMetaDataDialect.getSuggestedPrimaryKeyStrategyName(SQLServerMetaDataDialect.java:69)
    at org.hibernate.cfg.reveng.PrimaryKeyProcessor.processPrimaryKey(PrimaryKeyProcessor.java:109)
    at org.hibernate.cfg.reveng.JDBCReader.readDatabaseSchema(JDBCReader.java:183)
    at org.hibernate.cfg.reveng.JDBCReader.readDatabaseSchema(JDBCReader.java:125)
    at org.hibernate.cfg.reveng.JDBCReader.readDatabaseSchema(JDBCReader.java:118)
    at org.hibernate.cfg.JDBCBinder.readDatabaseSchema(JDBCBinder.java:154)
    at org.hibernate.cfg.JDBCBinder.readFromDatabase(JDBCBinder.java:119)
    at org.hibernate.cfg.JDBCMetaDataConfiguration.readFromJDBC(JDBCMetaDataConfiguration.java:174)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.tools.hibernate.runtime.common.Util.invokeMethod(Util.java:43)
    at org.jboss.tools.hibernate.runtime.common.AbstractConfigurationFacade.readFromJDBC(AbstractConfigurationFacade.java:208)
    at xdev.eclipse.internal.hibernate.metadata.MetadataUtils.lambda$1(MetadataUtils.java:173)
    at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:63)
    at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:107)
    at xdev.eclipse.internal.hibernate.metadata.MetadataUtils.readDatabaseMetadata(MetadataUtils.java:146)
    at xdev.eclipse.internal.server.core.ui.wizard.generateentities.AssociationsWizardPage.init(AssociationsWizardPage.java:849)
    at xdev.eclipse.internal.server.core.ui.wizard.generateentities.AssociationsWizardPage.lambda$2(AssociationsWizardPage.java:789)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2240)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2267)
    at xdev.eclipse.internal.server.core.ui.wizard.generateentities.AssociationsWizardPage.lambda$3(AssociationsWizardPage.java:796)
    at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Ungültiger Objektname 'INFORMATION_SCHEMA.Columns'.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1522)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1716)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285)
    at org.hibernate.cfg.reveng.dialect.SQLServerMetaDataDialect.getSuggestedPrimaryKeyStrategyName(SQLServerMetaDataDialect.java:36)
    ... 23 more

1 ответ

Ошибка довольно очевидна: возможно, проблема с драйвером JDBC.

Вы можете проверить, есть ли обновленный драйвер.

Кроме этого, я не вижу причины, по которой вы хотите генерировать сущности из производственной базы данных, вместо того, чтобы использовать производственную (измененную) схему (только для генерации!).

Вы можете просто

  1. export'n'import производственной базы данных (только схема, если она большая) в среде разработки
  2. изменить параметры сортировки в dev-env
  3. генерировать сущности
  4. вернуть параметры сортировки / реимпорта (в dev-env, чтобы вы могли проверить свои новые сущности)
  5. он должен работать нормально (даже в производстве, без каких-либо изменений в БД), когда вы развернете свое приложение

Так как ошибка связана с Ungültiger Objektname 'INFORMATION_SCHEMA.Columns', который используется только процедурой генерации, поэтому, вероятно, это лучшее решение.

Если это не работает даже таким образом, то это не относится к Eclipse/RapidClipse, но это реальная проблема совместимости между Hibernate и драйвером JDBC.

В этом случае, возможно, есть какой-то конкретный параметр конфигурации hibernate/jdbc для обработки двоичного сопоставления (может быть, определенный диалект).

Другие вопросы по тегам