[BUG]: #hibernate-v6 UnsupportedOperationException: YDB does not support FOR UPDATE statement
@KirillKurdyukov 已经在做这个了。
开始于 2025年9月11日。
评估
这个 Issue 还没有评估数据。
描述
Got an exception during schema generation for entity containing @GeneratedValue annotation without arguments:
java.lang.UnsupportedOperationException: YDB does not support FOR UPDATE statement
at tech.ydb.hibernate.dialect.YdbDialect.getForUpdateString(YdbDialect.java:359)
Works fine if changed to @GeneratedValue(strategy = GenerationType.IDENTITY).
helloworld.java:
import jakarta.persistence.EntityManager;
import jakarta.persistence.Persistence;
EntityManager entityManager() {
return Persistence.createEntityManagerFactory("default").createEntityManager();
}
account.java:
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.time.Instant;
import java.util.Currency;
@Entity
@Table(name = "accounts", uniqueConstraints = { @UniqueConstraint(columnNames = { "name", "currency" }) })
public class Account {
@Id
@GeneratedValue
@Getter
private long id;
@Column(nullable = false)
@Getter
@Setter
private String name;
@Getter
@Setter
private String notes;
@Column(nullable = false)
private String currency;
@Column(nullable = false, name = "created_at", updatable = false)
@Getter
@Setter
private Instant createdAt;
}
persistence.xml:
<persistence-unit name="default">
<class>bookkeeper.dao.entity.Account</class>
<properties>
<property name="hibernate.dialect" value="tech.ydb.hibernate.dialect.YdbDialect"/>
<property name="jakarta.persistence.schema-generation.database.action" value="update"/>
<property name="jakarta.persistence.jdbc.driver" value="tech.ydb.jdbc.YdbDriver"/>
</properties>
...
</persistence-unit>
build.gradle:
sourceCompatibility = JavaVersion.VERSION_21
dependencies {
implementation 'jakarta.persistence:jakarta.persistence-api:3.2.0'
implementation 'org.hibernate.orm:hibernate-core:7.1.0.Final'
implementation 'tech.ydb.dialects:hibernate-ydb-dialect:1.5.0'
implementation 'tech.ydb.jdbc:ydb-jdbc-driver:2.3.16'
}
...
Traceback:
16:25:50: Executing 'app:run'...
> Task :app:generateEffectiveLombokConfig UP-TO-DATE
> Task :app:compileJava UP-TO-DATE
> Task :app:processResources
> Task :app:classes
> Task :app:run FAILED
20-08-2025 16:25:51.141 | main | INFO | o.h.j.i.util.LogHelper | HHH000204: Processing PersistenceUnitInfo [name: default]
20-08-2025 16:25:51.230 | main | INFO | org.hibernate.Version | HHH000412: Hibernate ORM core version 7.1.0.Final
20-08-2025 16:25:51.376 | main | WARN | o.h.o.connections.pooling | HHH10001002: Using built-in connection pool (not intended for production use)
20-08-2025 16:25:51.399 | main | INFO | t.y.c.i.YdbTransportImpl | Create YDB transport with endpoint Endpoint{host=localhost, port=2136, node=0, location=null, overrideAuthority=null} and BalancingSettings{policy=USE_ALL_NODES, preferableLocation='null}
20-08-2025 16:25:51.447 | main | INFO | t.y.c.i.p.ChannelFactoryLoader | class io.grpc.netty.shaded.io.grpc.netty.NettyChannelBuilder is found, use ShadedNettyChannelFactory
20-08-2025 16:25:51.449 | main | INFO | t.y.c.a.StaticCredentials | create static identity for database /local
20-08-2025 16:25:51.451 | ydb-jdbc-scheduler[1211593500]-thread-1 | INFO | t.y.core.impl.YdbDiscovery | Waiting for init discovery...
20-08-2025 16:25:51.665 | main | INFO | t.y.t.i.pool.SessionPool | init session pool, min size = 10, max size = 50, keep alive period = 30000
20-08-2025 16:25:51.670 | main | INFO | t.y.query.impl.SessionPool | init QuerySession pool, min size = 0, max size = 50, keep alive period = 100000
20-08-2025 16:25:51.687 | main | INFO | t.y.query.impl.SessionPool | closing QuerySession pool
20-08-2025 16:25:51.687 | main | INFO | t.y.t.i.pool.SessionPool | closing session pool
20-08-2025 16:25:51.688 | main | INFO | t.y.c.i.YdbTransportImpl | Create YDB transport with endpoint Endpoint{host=localhost, port=2136, node=0, location=null, overrideAuthority=null} and BalancingSettings{policy=USE_ALL_NODES, preferableLocation='null}
20-08-2025 16:25:51.688 | main | INFO | t.y.c.a.StaticCredentials | create static identity for database /local
20-08-2025 16:25:51.688 | ydb-jdbc-scheduler[1211593500]-thread-1 | INFO | t.y.core.impl.YdbDiscovery | Waiting for init discovery...
20-08-2025 16:25:51.710 | main | INFO | t.y.t.i.pool.SessionPool | init session pool, min size = 10, max size = 50, keep alive period = 30000
20-08-2025 16:25:51.710 | main | INFO | t.y.query.impl.SessionPool | init QuerySession pool, min size = 0, max size = 50, keep alive period = 100000
20-08-2025 16:25:51.788 | main | INFO | o.h.o.connections.pooling | HHH10001005: Database info:
Database JDBC URL [jdbc:ydb:grpc://localhost:2136/local]
Database driver: YDB JDBC Driver
Database dialect: YdbDialect
Database version: 0.0
Default catalog/schema: unknown/undefined
Autocommit mode: false
Isolation level: SERIALIZABLE
JDBC fetch size: 1000
Pool: DriverManagerConnectionProviderImpl
Minimum pool size: 1
Maximum pool size: 20
20-08-2025 16:25:51.907 | main | INFO | t.y.query.impl.SessionPool | closing QuerySession pool
20-08-2025 16:25:51.907 | main | INFO | t.y.t.i.pool.SessionPool | closing session pool
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.10/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
4 actionable tasks: 2 executed, 2 up-to-date
Aug 20, 2025 4:25:51 PM tech.ydb.jdbc.YdbDriver register
INFO: YDB JDBC Driver registered: YDB JDBC Driver 2.3.16(based on SDK 2.3.18)
Exception in thread "main" java.lang.UnsupportedOperationException: YDB does not support FOR UPDATE statement
at tech.ydb.hibernate.dialect.YdbDialect.getForUpdateString(YdbDialect.java:359)
at org.hibernate.id.enhanced.TableStructure.initialize(TableStructure.java:344)
at org.hibernate.id.enhanced.SequenceStyleGenerator.initialize(SequenceStyleGenerator.java:313)
at org.hibernate.boot.model.internal.GeneratorAnnotationHelper.prepareForUse(GeneratorAnnotationHelper.java:311)
at org.hibernate.boot.model.internal.GeneratorAnnotationHelper.lambda$handleSequenceGenerator$2(GeneratorAnnotationHelper.java:182)
at org.hibernate.mapping.SimpleValue.createGenerator(SimpleValue.java:421)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.handleIdentifierValueBinding(InFlightMetadataCollectorImpl.java:2103)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processExportableProducers(InFlightMetadataCollectorImpl.java:2079)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.buildMetadataInstance(InFlightMetadataCollectorImpl.java:2039)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:228)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1412)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.populateSessionFactoryBuilder(EntityManagerFactoryBuilderImpl.java:1493)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1475)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)
at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:90)
at bookkeeper.telegram.Config.entityManager(Config.java:46)
at bookkeeper.telegram.Config_EntityManagerFactory.entityManager(Config_EntityManagerFactory.java:41)
at bookkeeper.telegram.Config_EntityManagerFactory.get(Config_EntityManagerFactory.java:33)
at bookkeeper.telegram.Config_EntityManagerFactory.get(Config_EntityManagerFactory.java:11)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at bookkeeper.telegram.DaggerTelegramContainer$TelegramContainerImpl.bot(DaggerTelegramContainer.java:279)
at bookkeeper.telegram.App.main(App.java:8)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:run'.
> Process 'command '/usr/lib/jvm/java-21-openjdk-amd64/bin/java'' finished with non-zero exit value 1
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 1s
16:25:52: Execution finished 'app:run'.
- 主要语言
- Java
- 星标
- 78
- 派生
- 24
- 平均合并
- 5 小时 45 分钟
- 30 天内合并 PR
- 3
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
ydb-platform/ydb-java-dialects 的其他 Issue
-
[jooq] Add DELETE LIMIT emulation via subquery可能重新可做 @Naifff 于 14 天前认领,目前没有进行中的 PR。 未关闭
难度 4/5 3-5 天 新手友好度 55/100
ydb-platform/ydb-java-dialects#217 · 1 条评论 ·
-
feat: Support adding @YdbType annotation to method parameters可能已有人在做 @KirillKurdyukov 于 617 天前认领。 未关闭pending-design
ydb-platform/ydb-java-dialects#173 · 10 条评论 · 1 个 reaction · 已指派 1 人 ·
-
student-projects
难度 5/5 一周以上 新手友好度 15/100
ydb-platform/ydb-java-dialects#170 · 2 条评论 ·
-
feat: Jimmer ORM可能已有人在做 @Rinoyt 于 171 天前认领。 未关闭student-projects
难度 5/5 一周以上 新手友好度 20/100
-
feat: SLO Hibernate可能重新可做 @KirillKurdyukov 于 785 天前认领,目前没有进行中的 PR。 未关闭
ydb-platform/ydb-java-dialects#147 · 已指派 1 人 ·
查看 ydb-platform/ydb-java-dialects 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
2026 Error Report
难度 2/5 1-3 小时 新手友好度 68/100
triplea-game/triplea#15096 ·
维护者通常 1 天内回复
-
[Bug][API] Switching workflow versions leaves schedules online可能已有人在做 @zhuangchong 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
apache/dolphinscheduler#18731 ·
维护者通常 1 天内回复
-
Implement JDBC Domain Enums (`SqlCategory`, `SqlExecutionStatus`, `SqlExecutionType`) in Core Module未关闭core-module enhancement good first issue
难度 1/5 1-3 小时 新手友好度 87/100
sdlc-pro/spring-lens#531 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
apache/rocketmq-dashboard#7340 ·
维护者通常 3 天内回复