SQLGrammarException: не удалось получить список предлагаемых стратегий идентификации из базы данных (сопоставление SQL-Server Latin1_General_BIN)
Я создал новый модуль сохраняемости в RapidClipse (Eclipse Neon с включенными плагинами Hibernate [и другими]), используя новый профиль подключения к SQL-Server 2014. "Тестовое подключение" работает нормально - "Пинг успешно завершен!".
В следующем диалоговом окне "Создать объекты из таблиц -> Выбрать таблицы" отображаются все таблицы, но при выборе одной из них и использовании "Создать объекты из таблиц -> Связи таблиц" происходит сбой:
Это происходит только при использовании сортировки с учетом регистра - база данных использует "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.
Вы можете проверить, есть ли обновленный драйвер.
Кроме этого, я не вижу причины, по которой вы хотите генерировать сущности из производственной базы данных, вместо того, чтобы использовать производственную (измененную) схему (только для генерации!).
Вы можете просто
- export'n'import производственной базы данных (только схема, если она большая) в среде разработки
- изменить параметры сортировки в dev-env
- генерировать сущности
- вернуть параметры сортировки / реимпорта (в dev-env, чтобы вы могли проверить свои новые сущности)
- он должен работать нормально (даже в производстве, без каких-либо изменений в БД), когда вы развернете свое приложение
Так как ошибка связана с Ungültiger Objektname 'INFORMATION_SCHEMA.Columns'
, который используется только процедурой генерации, поэтому, вероятно, это лучшее решение.
Если это не работает даже таким образом, то это не относится к Eclipse/RapidClipse, но это реальная проблема совместимости между Hibernate и драйвером JDBC.
В этом случае, возможно, есть какой-то конкретный параметр конфигурации hibernate/jdbc для обработки двоичного сопоставления (может быть, определенный диалект).