quarkus-hibernate-reactive连接SQL Server时schema配置失效问题求助
Quarkus Reactive对接SQL Server schema不生效解决方案
你遇到的Invalid object name报错核心是Hibernate生成SQL时未拼接schema前缀,导致SQL Server默认在登录用户的默认schema下检索表,找不到对应对象。此前配置失效的原因有两点:一是Quarkus框架下Hibernate配置需添加quarkus.前缀,原生hibernate.default_schema不会被框架识别;二是Vert.x MSSQL客户端的currentSchema参数对部分版本的SQL Server实例兼容性较差。
正确配置方案
优先使用框架统一配置
修改application.properties为以下内容:
quarkus.datasource.db-kind=mssql quarkus.datasource.username=<user-id> quarkus.datasource.password=<pwd> # 连接地址移除currentSchema参数,避免参数冲突 quarkus.datasource.reactive.url=sqlserver://localhost:1433/<db-name> quarkus.datasource.reactive.max-size=20 # 核心配置:Quarkus下指定Hibernate默认schema必须带quarkus前缀 quarkus.hibernate-orm.default_schema=<schema-name> # 可选配置:开启SQL日志,可直接查看生成的SQL是否携带schema前缀验证配置是否生效 quarkus.hibernate-orm.log.sql=true
备用兼容方案
如果上述配置仍未生效,可选择以下两种方案适配:
- 实体类显式指定schema:在所有数据表对应的实体类
@Table注解中声明schema,示例如下:
@Entity @Table(name = "你的表名", schema = "<schema-name>") public class 你的实体类 extends PanacheEntityBase { // 实体字段定义 }
- 适配旧版本SQL Server:在连接url中添加
currentCatalog=<schema-name>参数,适配2016及更早版本的SQL Server实例。
配置完成后调用接口测试,若控制台输出的SQL中表名格式为<schema-name>.<表名>,则说明配置已生效。
内容的提问来源于stack exchange,提问作者Rajiv Putuval
相关产品推荐
相关产品推荐

