【问题标题】:SQLGrammarException: Could not get list of suggested identity strategies from database (SQL-Server colllation Latin1_General_BIN)SQLGrammarException:无法从数据库中获取建议的标识策略列表(SQL-Server 排序规则 Latin1_General_BIN)
【发布时间】:2017-05-29 00:03:29
【问题描述】:

我在 RapidClipse(包括 Hibernate [和其他] 插件的 Eclipse Neon)中创建了一个新的持久性单元,使用 SQL-Server 2014 的新连接配置文件。“测试连接”工作正常 - “Ping 成功!”。

下一个对话框“从表生成实体 -> 选择表”显示所有表,但选择一个并使用“从表生成实体 -> 表关联”失败:

只有在使用区分大小写的排序规则时才会发生这种情况 - 数据库使用“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

【问题讨论】:

    标签: sql-server eclipse hibernate jdbc rapidclipse


    【解决方案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 配置参数来处理二进制排序规则(可能是特定的方言)。

    【讨论】:

    • 感谢您的回答 - “已交付” JDBC 驱动程序和 MS 下载页面的最新版本都会出现问题 :-( “不更改生产数据库”的原因:它是也用于不同的应用程序,这些应用程序期望数据库当前所在的排序规则。
    • 我不是要更改生产数据库,只是临时更改开发副本,只是生成实体所需的时间,然后恢复到原始排序规则。生产数据库保持不变。
    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 2014-02-22
    • 1970-01-01
    • 2014-11-25
    • 2011-10-15
    • 1970-01-01
    • 2010-09-13
    • 2019-03-07
    相关资源
    最近更新 更多