You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sakai 12.1部署测试失败:MySQL配置下出现HSQLDB连接错误求助

解决Sakai 12.1部署时kernel-impl测试失败(HSQLDB DUAL表错误)的问题

我之前部署Sakai的时候也碰到过几乎一模一样的问题,核心原因其实是Sakai的单元测试默认会使用内置的HSQLDB数据库——哪怕你在Tomcat的local.properties里配置了MySQL,测试阶段并不会自动读取这个生产环境配置,而是用内嵌的HSQLDB来跑测试用例,这就是你日志里突然出现HSQLDB的原因。

而报错里的insufficient user privileges or object not found: DUAL,是因为Sakai依赖的旧版HSQLDB不支持Oracle风格的DUAL表查询,导致测试中的SQL语句直接执行失败。

下面是几个可行的解决方法,按实用性优先级排序:

方法1:让测试阶段使用你的MySQL数据库

这是最贴近生产环境的方案,能确保测试和生产用相同的数据库,避免兼容性偏差:

  1. 先在MySQL中创建一个测试专用数据库(比如sakai_test),并给你的数据库用户分配足够权限(CREATE、INSERT、UPDATE、DELETE等)。
  2. 在原构建命令中追加测试用的数据库参数,修改后的命令如下:
mvn clean install sakai:deploy -Dmaven.tomcat.home=$CATALINA_HOME -Dsakai.home=$CATALINA_HOME/sakai -Dsakai.cleanup=true -Djava.net.preferIPv4Stack=true \
-Ddb.url=jdbc:mysql://localhost:3306/sakai_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false \
-Ddb.driver=com.mysql.cj.jdbc.Driver \
-Ddb.username=你的MySQL用户名 \
-Ddb.password=你的MySQL密码

这样测试阶段就会强制使用你指定的MySQL数据库,而不是默认的HSQLDB。

方法2:修改测试资源的数据库配置

如果你不想每次构建都手动加参数,可以直接修改kernel模块的测试配置文件:

  1. 打开/home/usuario/sakai/kernel/kernel-impl/src/test/resources目录,找到测试用的配置文件(比如hibernate.cfg.xml或sakai-test.properties)。
  2. 把里面的HSQLDB连接配置全部替换成你的MySQL信息:
    • 替换JDBC URL为你的MySQL数据库地址
    • 替换驱动类为com.mysql.cj.jdbc.Driver
    • 替换数据库用户名和密码
  3. 保存后重新执行原构建命令即可。

方法3:修复HSQLDB的DUAL表查询问题(不推荐)

如果坚持要用默认的HSQLDB跑测试,需要修改测试代码里的SQL语句:

找到RoleAccessTest中使用DUAL表的查询语句,把SELECT ... FROM DUAL改成HSQLDB支持的写法,比如SELECT ... FROM (VALUES(1)) AS t。不过这种方式需要修改Sakai源码,后续版本升级时修改会被覆盖,所以不太推荐。

最后补充个小提醒:如果是全新安装,记得先给生产MySQL数据库运行Sakai的初始化脚本(在源码的sql目录下);测试用的数据库可以让Hibernate自动创建表,只要把测试配置里的hibernate.hbm2ddl.auto设置为create或update就行。

内容的提问来源于stack exchange,提问作者andcl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:22:43