-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Labels
bugSomething isn't workingSomething isn't working
Description
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'.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working