hibernate - Quarkus - 指定自己的休眠方言以使用 Vlad Mihalcea 的 Json 休眠扩展
问题描述
我目前正在尝试在我的数据库中使用一些 json 类型。
我按照这篇文章试过:
https://vladmihalcea.com/sql-server-json-hibernate/
包括这个之后,我得到了以下异常:
2021-07-13 11:08:07,235 ERROR [io.qua.run.Application] (Quarkus Main Thread) Failed to start application (with profile dev): org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
at org.hibernate.dialect.TypeNames.get(TypeNames.java:71)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:103)
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:404)
at org.hibernate.mapping.Column.getSqlType(Column.java:238)
at org.hibernate.mapping.Table.sqlAlterStrings(Table.java:479)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.migrateTable(AbstractSchemaMigrator.java:299)
at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:75)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:207)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:192)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:81)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:327)
at io.quarkus.hibernate.orm.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:73)
at io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:67)
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)
at java.base/java.lang.Thread.run(Thread.java:834)
然后我尝试按照这篇文章创建自己的方言:
https://vladmihalcea.com/hibernate-no-dialect-mapping-for-jdbc-type/
但我仍然得到同样的例外。我尝试将我自己的类添加到应用程序属性中的方言属性中。但这似乎没有奏效。
有没有办法用 quarkus 来配置它?我担心,我真的不能这样做,因为该物业有关于其限制的免责声明。
编辑:我最初修复了它,因为我删除了数据库模式的自动生成。在我添加了带有触发器的数据库存储的 quarkus-quartz(使用 quarkus.quartz.store-type=JDBC_TX 的集群模式)之后,我现在再次收到此错误。应用程序尝试更新数据库中的触发器(更改计划时间)并引发此错误。
我添加了以下类:
package emilfrey.backend;
import com.vladmihalcea.hibernate.type.json.JsonNodeBinaryType;
import org.hibernate.dialect.SQLServer2012Dialect;
import java.sql.Types;
public class SQLServer2012JsonDialect extends SQLServer2012Dialect {
public SQLServer2012JsonDialect(){
super();
this.registerHibernateType(Types.OTHER, JsonNodeBinaryType.class.getName());
}
}
并在 application.properties 中添加了以下属性
quarkus.hibernate-orm.dialect = somepackage.backend.SQLServer2012JsonDialect
错误仍然存在。我想这与该新类的可用性及其加载有关。但我不确定。有人可以帮我解决这个问题吗?
已经谢谢你了。
解决方案
我不知道在启用模式生成时解决这个问题。
但是对于禁用模式生成时遇到此问题的任何人,在 Quarkus 开发模式下,这是在 Quarkus 2.4.1 中修复的错误:https ://github.com/quarkusio/quarkus/issues/21122
推荐阅读
- r - 如何按级别分隔列
- algorithm - 如何从 O(logn) 中的电话簿字符串中查找名称
- javascript - 在 React 中将登录更改为注销
- node.js - 设置默认日期和时间
- vue.js - 此消息类型不允许使用参数:code_challenge_method,如何在 nuxt 中修复它?
- winapi - Windows Shell:如何确定 PIDL 是绝对的还是相对的,以及如何将相对转换为绝对?
- c++ - 如何使用链表找到参数中的最大值?
- selenium-webdriver - 在 selenium 自动化中打开 url 时出现空指针异常
- vbscript - 如何递归获取子文件夹中的文件详细信息?
- sql - SQL Server:LEFT JOIN EMPLOYEE MANAGER 关系