为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2021-09-26 13:16:08
从休眠 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。这里的迁移指南:https : //github.com/hibernate/hibernate-orm/blob/5.3/migration-guide.adoc不引用序列生成器的任何更改。可能是什么问题 ?
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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


在SequenceStyleGenerator.determineSequenceName添加代码的方法中:


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.model.generator_name_as_sequence_name为不使用生成器名称,恢复到休眠 5.2- 行为false


查看完整回答
反对 回复 2021-09-26
  • 2 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号