0

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

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

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
4

1 回答 1

0

该错误是不言自明的:可能是 JDBC 驱动程序问题

您可能需要检查是否有更新的驱动程序。

除此之外,我看不到您要从生产数据库生成实体的原因,而不是使用生产(更改)模式(仅用于生成!)。

你可以

  1. 在开发环境中导出'n'导入生产数据库(如果它很大,则只是模式)
  2. 更改 dev-env 中的排序规则
  3. 生成实体
  4. 恢复排序规则/重新导入(在 dev-env中,因此您可以测试新实体)
  5. 当您部署应用程序时,它应该可以正常工作(即使在生产中,无需任何数据库修改)

由于错误与Ungültiger Objektname 'INFORMATION_SCHEMA.Columns'仅由生成过程使用的 相关,因此这样做可能是最好的解决方案。

如果即使这样也无法正常工作,那么它与Eclipse / RapidClipse 无关,但这是 Hibernate 和 JDBC 驱动程序之间真正的兼容性问题。

在这种情况下,可能有一些特定的 hibernate/jdbc 配置参数来处理二进制排序规则(可能是特定的方言)。

于 2017-01-17T09:19:07.260 回答