Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从hibernate 5.2迁移到5.3时,hibernate尝试使用一个奇怪的序列_Java_Hibernate - Fatal编程技术网

Java 从hibernate 5.2迁移到5.3时,hibernate尝试使用一个奇怪的序列

Java 从hibernate 5.2迁移到5.3时,hibernate尝试使用一个奇怪的序列,java,hibernate,Java,Hibernate,从hibernate 5.2.17升级到5.3.6后,我遇到以下错误: Caused by: org.h2.jdbc.JdbcSQLException: Schéma "ENHANCED" non trouvé Schema "ENHANCED" not found; SQL statement: call next value for enhanced.SequenceStyleGenerator [90079-197] at org.h2.engine.SessionRemote.d

从hibernate 5.2.17升级到5.3.6后,我遇到以下错误:

Caused by: org.h2.jdbc.JdbcSQLException: Schéma "ENHANCED" non trouvé
Schema "ENHANCED" not found; SQL statement:
call next value for enhanced.SequenceStyleGenerator [90079-197]
    at org.h2.engine.SessionRemote.done(SessionRemote.java:623) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.command.CommandRemote.prepare(CommandRemote.java:85) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.command.CommandRemote.<init>(CommandRemote.java:51) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:493) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76) ~[h2-1.4.197.jar:1.4.197]
    at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:304) ~[h2-1.4.197.jar:1.4.197]
    at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyConnection.java:567) ~[c3p0-0.9.5.2.jar:0.9.5.2]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:87) ~[hibernate-core-5.3.6.Final.jar:5.3.6.Final]
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172) ~[hibernate-core-5.3.6.Final.jar:5.3.6.Final]
在hibernate 5.2中,它可以像预期的那样工作,但在hibernate 5.3中不再如此

此处的迁移指南:不要引用sequence generator上的任何更改


可能是什么问题?

您的生成器名称被解释为属于特定的架构,重命名应该可以解决此问题-避免点


请查看手册第2.6.11节,了解如何命名和参数化生成器:

我发现这是hibernate 5.3的一种新行为:

在方法
SequenceStyleGenerator.DetermineseSequenceName
中添加了以下代码:

final Boolean preferGeneratorNameAsDefaultName = serviceRegistry.getService( ConfigurationService.class )
            .getSetting( AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, StandardConverters.BOOLEAN, true );
if ( preferGeneratorNameAsDefaultName ) {
    final String generatorName = params.getProperty( IdentifierGenerator.GENERATOR_NAME );
    if ( StringHelper.isNotEmpty( generatorName ) ) {
        fallbackSequenceName = generatorName;
    }
}
新的默认行为是使用生成器名称作为序列名称。因此,从hibernate 5.2迁移到5.3有两种可能:

  • 将生成器名称更改为序列名称
  • 通过在hibernate配置中将
    hibernate.model.generator\u name\u as\u sequence\u name
    设置为
    false
    ,恢复到hibernate 5.2-不使用生成器名称的行为(或生成器参数)

尝试将序列生成器命名为
SequenceGenerator
或其他名称,而不是
enhanced.SequenceStyleGenerator
,然后重试。文档的第2.6.11节是关于
2.6.11的。使用UUID生成
。我在本节中没有看到对生成器名称的引用。你确定你浏览了正确的部分吗?删除点是一个正确方向的提示:)我发现可能需要将生成器重命名为hibernate序列名称(在我的情况下是hibernate_序列,因为我没有更改默认值)对应的hibernate问题,这将此更改作为“bug”修复引入(?)
final Boolean preferGeneratorNameAsDefaultName = serviceRegistry.getService( ConfigurationService.class )
            .getSetting( AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, StandardConverters.BOOLEAN, true );
if ( preferGeneratorNameAsDefaultName ) {
    final String generatorName = params.getProperty( IdentifierGenerator.GENERATOR_NAME );
    if ( StringHelper.isNotEmpty( generatorName ) ) {
        fallbackSequenceName = generatorName;
    }
}