已开启
【实习#28】新增 SpringDataJPA 配合 MySQL JDBC 连接 openGauss B 库示例与自测 #111
【实习#28】新增 SpringDataJPA 配合 MySQL JDBC 连接 openGauss B 库示例与自测 #111
已开启
wsrym创建于 9 天前
wsrym
wsrym
9 天前

【标题】新增 SpringDataJPA 配合 MySQL JDBC 连接 openGauss B 库示例与自测

【实现内容】:
新增 springdatajpa-connect-opengauss-b/ 示例工程(Spring Boot 3.5.16 + Spring Data JPA(Hibernate 6.6)+ MySQL Connector/J 经 dolphin MySQL 协议连接 openGauss B 兼容库,端口
3308):

  1. 示例工程本体:pom.xml(7 档驱动扫测 profile)、application.yml(凭据仅环境变量注入)、SmokeApplication / TxService / User 实体与 UserRepository、自定义方言OpenGaussBMySQLDialect(继承 MySQLDialect,声明 B 模式"无反斜杠转义"语义);
  2. 测试代码 19 用例:已知差异回归 2、ddl-auto 专项 2、类型映射(含主键回填)1、分页与批量 2、冒烟 3、协议命令专项 9;
  3. 测试思维导图(.mm/.md/.html)与自测报告(docs/ 目录,含 gsql 取证附录 7.2);
  4. 驱动版本矩阵:7 档(8.0.28 ~ 26.7.0)。核心链路(类型映射、主键回填、分页、批量、事务回滚)与驱动版本无关;协议命令专项按驱动版本分三档:8.0.28 档 COM_STMT_RESET崩溃服务端(FINDING I)、8.0.28~8.4.0 档 SEND_LONG_DATA 丢末块 8KB(FINDING H)、9.7.0 及以上正常(与 #27 报告 8 档矩阵结论互相印证)。

【根因分析】:
官方开发指导文档尚无基于 SpringDataJPA 连接 openGauss B 库的示例;ORM 层(方言、元数据探测、查询渲染)是与驱动不同维度的兼容性风险区,需要实测验证。实测发现并定位 6 个问题:LIKE模糊查询 escape 转义语义差异(Hibernate 6.6 默认给 LIKE 追加 escape '\',B 模式按标准 SQL 视 '\' 为 2 字符 → invalid escape string;与社区已记录的已知差异同源,参见 Plugin 仓issue #504,规避:JPQL 显式 escape '!')、FINDING E(ddl-auto=update 静默失效,根因默认配置下 information_schema表名大小写敏感,视图存在、小写可查,dolphin.lower_case_table_names=1 持久化后恢复)、FINDING F/G/H/I(协议命令专项,与 #27 报告同源)。转义差异与 FINDING E/F/G均与驱动版本无关,根源在服务端;FINDING H/I 触发条件依赖驱动版本。

【实现方案】:
以 Boot BOM 默认驱动建立冒烟基线,再针对 ORM 高风险环节(方言 / 元数据 / 主键 / 查询渲染)设计专项用例;对转义语义差异先用文档基准驱动 8.0.28 复现排除驱动因素,再下钻到 SQL 层用gsql 取证定位服务端语义差异,最后以 7 档驱动矩阵确认问题归属。K1 用例将当前已知的差异行为写成回归断言:服务端行为调整后测试自动失败,提醒移除 workaround 并更新文档。

【关联需求或issue】:
https://gitcode.com/opengauss/opensource-intership/issues/28

【开发自验报告】:

  1. 请附上自验结果(内容或者截图)
    自测结论:Boot BOM 默认档(mysql-connector-j 9.7.0)19/19 用例全部通过(BUILD SUCCESS,"通过" = 与断言一致,含 K1 复现转义语义差异、D1 复现 FINDING E 的回归断言);7档驱动矩阵共 133 例次:核心链路(类型映射、主键回填、分页、批量、事务回滚)逐项一致、与驱动版本无关;协议命令专项三档行为:9.7.0/26.7.0 档 19/19 全绿、8.0.33~8.4.0 档18/19(唯一失败为 FINDING H 已知缺陷断言)、8.0.28 档基础类 10/10 通过、协议命令暴露 FINDING I(COM_STMT_RESET 崩溃服务端进程)。规避:JPQL 显式 escape '!';gsql 取证见报告 7.2节。详见工程内 docs/基于SpringDataJPA框架的openGauss数据库测试.md。

  2. 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
    否。examples 仓为示例与自测代码,不纳入服务端 fastcheck 回归用例体系。

  3. 是否涉及资料修改,如是,在docs仓库补充资料
    是。基于 SpringDataJPA 开发指导文档(springdatajpa_development.md)已单独提 PR 至 docs 仓。

  4. 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
    否。示例工程不修改数据库对象或执行态。

  5. 是否考虑在线扩容等扩展场景
    否。

  6. 是否考虑异常场景/并发场景/前向兼容/性能场景
    部分。已覆盖已知差异回归断言(K1 复现转义语义差异、K2 验证 escape '!' workaround)与 7 档驱动前向兼容;并发、性能与故障注入场景未覆盖。

  7. 是否对其他模块产生影响
    否。独立示例工程,不影响其他模块。

  8. 是否需要回合补丁版本(5.0、6.0),涉及(结果错误|coredump|性能劣化|内存泄露|集群异常)相关修复请排查回合补丁分支
    否。本 PR 为示例与自测代码,无服务端代码修改,不涉及上述缺陷修复。

  9. 针对Plugin仓dolphin插件,新增/修改的代码是否已使用 DOLPHIN 宏进行控制,方便后续回合openGauss-server仓代码
    否。本 PR 不含 dolphin 插件代码修改。

【当前PR是否有AI参与】:
[ ] 否
[x] 是
__1. AI Agent 平台: Claude Code 2.1.251
__2. AI 模型: DeepSeek-V4-Pro
__3. Prompt上下文: Adapt Spring Data JPA with MySQL JDBC to openGauss B-mode via dolphin MySQL protocol; deliver test code, mind map, self-test report and docs guide for
internship issue #28

【其他说明】:
实测环境 openGauss 7.0.0-RC3(源码编译,commit fe6f6e4b),与任务要求的 7.0.0-LTS 在 MySQL 协议兼容行为上应一致,正式版发布后建议用同一套用例回归。

likedislike
合并受阻
wsrymwsrym
9 天前 创建了 pull request,commit 3f98b3f7
wsrymwsrym
9 天前 关联了issue:openGauss集成融合Elasticsearch,[开源实习]: openGauss B库B协议适配MySQL Java框架 SpringDataJPA
opengauss_botopengauss_bot成员
9 天前 将ywzq1161327784,chenxiaobin19,totaj,congzhou2603,shenzheng4,chendong76,dodders,muyulinzhong,shirley_zhengx,quemingjian,jemappellehc,wofanzheng,wlff234,libiao2024,hwworkholic,CarrotGo,superlchf设为审查人
opengauss_botopengauss_bot成员
9 天前 添加了label:sig/Infra
opengauss_bot
opengauss_bot成员
9 天前 评论:

Welcome To openGauss Community

Hey @lele-2026 , thanks for your contribution to the community.

Bot Usage Manual

I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands. You can self-configure the PR merge rules for this repository. For more details, please refer to Here.

Contact Guide

If you have any questions, please contact the SIG: Infra ,
and any of the maintainers: @CarrotGo, @chendong76, @chenxiaobin19, @congzhou2603, @dodders, @hwworkholic, @jemappellehc, @libiao2024, @muyulinzhong, @quemingjian, @shenzheng4, @shirley_zhengx, @superlchf, @totaj, @wlff234, @wofanzheng, @ywzq1161327784 ,
and any of the committers: @ailoooong, @gzbang, @libiao2024, @zhangxubo .

likedislike
此处折叠了47条消息 查看更多
opengauss_botopengauss_bot成员
3 天前 删除了label:opengauss-cla/yes
opengauss_botopengauss_bot成员
3 天前 删除了label:stat/needs-squash
opengauss_bot
opengauss_bot成员
3 天前 评论:

Notification

This pull request has been changed(code update) or closed, so removes the following label(s): stat/needs-squash.

likedislike
opengauss_botopengauss_bot成员
3 天前 添加了label:opengauss-cla/yes
opengauss_bot
opengauss_bot成员
3 天前 评论:

CLA Signature Pass

lele-2026, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike