Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hibernate Reactive database generation issue #10665

Closed
akoufa opened this issue Jul 12, 2020 · 19 comments · Fixed by #21404
Closed

Hibernate Reactive database generation issue #10665

akoufa opened this issue Jul 12, 2020 · 19 comments · Fixed by #21404
Labels
area/hibernate-orm Hibernate ORM area/hibernate-reactive Hibernate Reactive area/persistence OBSOLETE, DO NOT USE kind/bug Something isn't working
Milestone

Comments

@akoufa
Copy link

akoufa commented Jul 12, 2020

Hello. I am using Quarkus 1.6.0.Final and trying out Hibernate Reactive. I found the following issue when adding the properties:

quarkus.hibernate-orm.database.generation=update
quarkus.hibernate-orm.sql-load-script=no-file

Error:

2020-07-13 00:15:45,583 ERROR [io.qua.application] (Quarkus Main Thread) Failed to start application: org.hibernate.HibernateException: DdlTransactionIsolatorJtaImpl could not locate TransactionManager to suspend any current transaction; base JtaPlatform impl (org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform@48bd5f2a)?
	at org.hibernate.resource.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:46)
	at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl.buildDdlTransactionIsolator(JtaTransactionCoordinatorBuilderImpl.java:46)
	at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.getDdlTransactionIsolator(HibernateSchemaManagementTool.java:188)
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:94)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:316)
	at org.hibernate.reactive.session.impl.ReactiveSessionFactoryImpl.<init>(ReactiveSessionFactoryImpl.java:23)
	at io.quarkus.hibernate.reactive.runtime.boot.FastBootReactiveEntityManagerFactoryBuilder.build(FastBootReactiveEntityManagerFactoryBuilder.java:29)
	at io.quarkus.hibernate.reactive.runtime.FastBootHibernateReactivePersistenceProvider.createEntityManagerFactory(FastBootHibernateReactivePersistenceProvider.java:65)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:163)
	at io.quarkus.hibernate.orm.runtime.JPAConfig.startAll(JPAConfig.java:84)
	at io.quarkus.hibernate.orm.runtime.HibernateOrmRecorder.startAllPersistenceUnits(HibernateOrmRecorder.java:95)
	at io.quarkus.deployment.steps.HibernateOrmProcessor$startPersistenceUnits-1681903524.deploy_0(HibernateOrmProcessor$startPersistenceUnits-1681903524.zig:70)
	at io.quarkus.deployment.steps.HibernateOrmProcessor$startPersistenceUnits-1681903524.deploy(HibernateOrmProcessor$startPersistenceUnits-1681903524.zig:36)
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:500)
	at io.quarkus.runtime.Application.start(Application.java:90)
	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:91)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:61)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:38)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:106)
	at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.runner.bootstrap.StartupActionImpl$3.run(StartupActionImpl.java:145)
	at java.base/java.lang.Thread.run(Thread.java:834)

2020-07-13 00:15:45,609 ERROR [io.qua.run.Application] (Quarkus Main Thread) Error running Quarkus application: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:617)
	at io.quarkus.runtime.Application.start(Application.java:90)
	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:91)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:61)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:38)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:106)
	at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.runner.bootstrap.StartupActionImpl$3.run(StartupActionImpl.java:145)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.hibernate.HibernateException: DdlTransactionIsolatorJtaImpl could not locate TransactionManager to suspend any current transaction; base JtaPlatform impl (org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform@48bd5f2a)?
Caused by: org.hibernate.HibernateException: DdlTransactionIsolatorJtaImpl could not locate TransactionManager to suspend any current transaction; base JtaPlatform impl (org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform@48bd5f2a)?

	at org.hibernate.resource.transaction.backend.jta.internal.DdlTransactionIsolatorJtaImpl.<init>(DdlTransactionIsolatorJtaImpl.java:46)
	at org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl.buildDdlTransactionIsolator(JtaTransactionCoordinatorBuilderImpl.java:46)
	at org.hibernate.tool.schema.internal.HibernateSchemaManagementTool.getDdlTransactionIsolator(HibernateSchemaManagementTool.java:188)
	at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:94)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:316)
	at org.hibernate.reactive.session.impl.ReactiveSessionFactoryImpl.<init>(ReactiveSessionFactoryImpl.java:23)
	at io.quarkus.hibernate.reactive.runtime.boot.FastBootReactiveEntityManagerFactoryBuilder.build(FastBootReactiveEntityManagerFactoryBuilder.java:29)
	at io.quarkus.hibernate.reactive.runtime.FastBootHibernateReactivePersistenceProvider.createEntityManagerFactory(FastBootHibernateReactivePersistenceProvider.java:65)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:163)
	at io.quarkus.hibernate.orm.runtime.JPAConfig.startAll(JPAConfig.java:84)
	at io.quarkus.hibernate.orm.runtime.HibernateOrmRecorder.startAllPersistenceUnits(HibernateOrmRecorder.java:95)
	at io.quarkus.deployment.steps.HibernateOrmProcessor$startPersistenceUnits-1681903524.deploy_0(HibernateOrmProcessor$startPersistenceUnits-1681903524.zig:70)
	at io.quarkus.deployment.steps.HibernateOrmProcessor$startPersistenceUnits-1681903524.deploy(HibernateOrmProcessor$startPersistenceUnits-1681903524.zig:36)
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:500)
	... 12 more

It works when using

quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.sql-load-script=import.sql
@akoufa akoufa added the kind/bug Something isn't working label Jul 12, 2020
@quarkusbot quarkusbot added area/hibernate-orm Hibernate ORM area/hibernate-reactive Hibernate Reactive area/persistence OBSOLETE, DO NOT USE labels Jul 12, 2020
@quarkusbot
Copy link

/cc @aguibert, @gavinking, @Sanne
/cc @gsmet, @Sanne

@gavinking
Copy link

Hibernate Reactive doesn't support schema update, I don't think. I mean, if you add a JDBC driver, perhaps it would work (I've never tried), but if you're using just the vert.x client, there is nothing like JDBC metadata available.

@akoufa
Copy link
Author

akoufa commented Jul 14, 2020

@gavinking Is this planned to be supported in the future ?

@Sanne
Copy link
Member

Sanne commented Jul 14, 2020

I suppose we'll need the Hibernate Reactive extension in Quarkus to check for the configuration to not have set "generation=update" and throw a more explicit error.

@aguibert
Copy link
Member

@gavinking I added a DB metadata API in Vertx which should be available in version 3.9.2, so next time we upgrade Vertx we could in theory support this use case

@gavinking
Copy link

That's great but even so it would still likely be quite a lot of work to implement.

@wolfomat

This comment has been minimized.

@wolfomat
Copy link

wolfomat commented Mar 22, 2021

and
quarkus.hibernate-orm.database.generation.create-schemas=true

doesn't do anything....
no erros, but also no schema.

@gavinking
Copy link

To clarify: AFAIK, schema export does work in Quarkus with HR. This issue is specific to schema validation and update.

@MartinX3
Copy link

MartinX3 commented Nov 4, 2021

Any update on this?

@Sanne
Copy link
Member

Sanne commented Nov 4, 2021

hi @MartinX3 - yes this is implemented now. Sorry I forgot to close this ticket - it's out of date. Please try it!

@Sanne Sanne closed this as completed Nov 4, 2021
@MartinX3
Copy link

MartinX3 commented Nov 5, 2021

hi @Sanne
Sadly it doesn't work here.
I use quarkus.datasource.db-kind=postgresql

I only use reactive without jdbc and set
quarkus.datasource.jdbc=false
to prevent
Unable to find a JDBC driver corresponding to the database kind 'postgresql' for the default datasource.
from occuring.

But sadly with
quarkus.hibernate-orm.database.generation=update
or
quarkus.hibernate-orm.database.generation=validate
the error message
org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
caused by
Not using JDBC
appears.

quarkus.hibernate-orm.database.generation=drop-and-create works fine, after I disabled JDBC.

My gradle deps:

    implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusVersion}"))

    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

    implementation("io.quarkus:quarkus-arc")
    implementation("io.quarkus:quarkus-config-yaml")
    implementation("io.quarkus:quarkus-hibernate-reactive-panache")
    implementation("io.quarkus:quarkus-kotlin")
    implementation("io.quarkus:quarkus-logging-json")
    implementation("io.quarkus:quarkus-reactive-pg-client")
    implementation("io.quarkus:quarkus-resteasy-reactive-jackson")
    implementation("io.quarkus:quarkus-rest-client-reactive-jackson")

    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

These dependencies are used:
grafik

Also I don't find any quarkus qickstart or quarkus test using
quarkus.hibernate-orm.database.generation=update

Maybe the same issue he has
quarkusio/quarkus-quickstarts#816

@Sanne
Copy link
Member

Sanne commented Nov 5, 2021

Oops sorry let's reopen this then. I thought it was working but clearly we need to check.

@Sanne Sanne reopened this Nov 5, 2021
@MartinX3
Copy link

MartinX3 commented Nov 5, 2021

Thank you very much
I also need to figure out why the reactive panache quickstarter don't need quarkus.datasource.jdbc=false and why some examples tell me to put vertx-reactive in the reactive url and others doesn't.

@Sanne
Copy link
Member

Sanne commented Nov 5, 2021

Hibernate Reactive doesn't need the JDBC drivers, and it actually causes some problems (which we need to solve still but that's a different story); if Quarkus finds a JDBC driver on the classpath it's going to enable the jdbc support automatically.

The quickstarts don't have any JDBC driver dependency so they don't need to explicitly disable it.

@MartinX3
Copy link

MartinX3 commented Nov 5, 2021

But I also didn't add JDBC by myself.
I just use the deps and the config entries from the quickstarter.
The only difference I see is, that I use gradle, kotlin and yaml instead of maven, java and application.
And no quarkus.hibernate-orm.sql-load-script

I wonder if it is connected to the missing panache reactive package for kotlin described in #16785.

@Sanne
Copy link
Member

Sanne commented Nov 5, 2021

@MartinX3 that's odd - could you open a different issue focused on the quarkus.datasource.jdbc=false and attach a reproducer please?

@MartinX3
Copy link

MartinX3 commented Nov 5, 2021

Created #21227

@edeandrea
Copy link
Contributor

edeandrea commented Nov 5, 2021

I'm finding that this still doesn't work either (using HR and trying to set quarkus.hibernate-orm.database.generation=validate). I am getting

2021-11-05 09:13:04,396 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.dev.appstate.ApplicationStateNotification.waitForApplicationStart(ApplicationStateNotification.java:51)
	at io.quarkus.runner.bootstrap.StartupActionImpl.runMainClass(StartupActionImpl.java:122)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:143)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:444)
	at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:65)
	at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:149)
	at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:105)
	at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:145)
	at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:63)
Caused by: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:901)
	at io.quarkus.runtime.Application.start(Application.java:101)
	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:104)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
	at io.quarkus.runtime.Quarkus.run(Quarkus.java:120)
	at io.quarkus.runner.GeneratedMain.main(GeneratedMain.zig:29)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:103)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.RuntimeException: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
	at io.quarkus.hibernate.orm.runtime.JPAConfig.startAll(JPAConfig.java:72)
	at io.quarkus.hibernate.orm.runtime.JPAConfig_Subclass.startAll$$superforward1(JPAConfig_Subclass.zig:258)
	at io.quarkus.hibernate.orm.runtime.JPAConfig_Subclass$$function$$5.apply(JPAConfig_Subclass$$function$$5.zig:24)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:54)
	at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.proceed(InvocationInterceptor.java:62)
	at io.quarkus.arc.runtime.devconsole.InvocationInterceptor.monitor(InvocationInterceptor.java:51)
	at io.quarkus.arc.runtime.devconsole.InvocationInterceptor_Bean.intercept(InvocationInterceptor_Bean.zig:516)
	at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:41)
	at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:41)
	at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:32)
	at io.quarkus.hibernate.orm.runtime.JPAConfig_Subclass.startAll(JPAConfig_Subclass.zig:673)
	at io.quarkus.hibernate.orm.runtime.HibernateOrmRecorder.startAllPersistenceUnits(HibernateOrmRecorder.java:96)
	at io.quarkus.deployment.steps.HibernateOrmProcessor$startPersistenceUnits1868654632.deploy_0(HibernateOrmProcessor$startPersistenceUnits1868654632.zig:74)
	at io.quarkus.deployment.steps.HibernateOrmProcessor$startPersistenceUnits1868654632.deploy(HibernateOrmProcessor$startPersistenceUnits1868654632.zig:40)
	at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:786)
	... 12 more
Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
	at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:71)
	at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:60)
	at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:41)
	at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39)
	at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:64)
	at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.<init>(DatabaseInformationImpl.java:58)
	at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:183)
	at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:60)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:200)
	at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:81)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:327)
	at org.hibernate.reactive.session.impl.ReactiveSessionFactoryImpl.<init>(ReactiveSessionFactoryImpl.java:33)
	at io.quarkus.hibernate.reactive.runtime.boot.FastBootReactiveEntityManagerFactoryBuilder.build(FastBootReactiveEntityManagerFactoryBuilder.java:31)
	at io.quarkus.hibernate.reactive.runtime.FastBootHibernateReactivePersistenceProvider.createEntityManagerFactory(FastBootHibernateReactivePersistenceProvider.java:83)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:149)
	at io.quarkus.hibernate.orm.runtime.JPAConfig$1.run(JPAConfig.java:58)
	... 1 more
Caused by: java.sql.SQLException: Not using JDBC
	at org.hibernate.reactive.provider.service.NoJdbcConnectionProvider.getConnection(NoJdbcConnectionProvider.java:25)
	at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:181)
	at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:44)
	... 18 more

Reproducer: https://github.com/quarkus-for-spring-developers/examples/tree/main/chapter-4/chapter-4-quarkus-panache-reactive-activerecord (need to change src/main/resources/application.yml as it currently sets the property value to none

@gsmet gsmet modified the milestones: 2.6 - main, 2.5.0.Final Nov 15, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/hibernate-orm Hibernate ORM area/hibernate-reactive Hibernate Reactive area/persistence OBSOLETE, DO NOT USE kind/bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

9 participants