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

JHipster多租户应用生成时出现Hibernate缓存未定义错误

解决JHipster多租户生成器抛出的hibernateCache is not defined错误

问题重现

你用JHipster Generator v4.13.1搭建了主应用,接着执行以下命令安装多租户生成器:

npm install generator-jhipster-multitenancy

运行yo jhipster-multitenancy并回答完“应用中租户的别名是什么?(Company)”的提示后,突然抛出了如下错误:

events.js:182 throw er; // Unhandled 'error' event
^
ReferenceError: /home/joag/Proyectos/Munkys/prueba2/node_modules/generator-jhipster-multitenancy/generators/app/templates/src/main/java/package/domain/_User.java:26
24| import com.fasterxml.jackson.annotation.JsonIgnore;
25| import org.apache.commons.lang3.StringUtils;<% if (databaseType === 'sql') { %>

26| import org.hibernate.annotations.BatchSize;<% } %><% if (hibernateCache !== 'no' && databaseType === 'sql') { %>
27| import org.hibernate.annotations.Cache;
28| import org.hibernate.annotations.CacheConcurrencyStrategy;<% } %>
29| import org.hibernate.validator.constraints.Email;
hibernateCache is not defined
at eval (eval at compile (/home/joag/Proyectos/Munkys/prueba2/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:28:8)
at returnedFn (/home/joag/Proyectos/Munkys/prueba2/node_modules/ejs/lib/ejs.js:580:17)
at Object.exports.render (/home/joag/Proyectos/Munkys/prueba2/node_modules/ejs/lib/ejs.js:384:37)
...(剩余堆栈信息省略)

问题根源

这个错误的核心原因是多租户生成器的EJS模板依赖hibernateCache变量,但你使用的JHipster v4.13.1版本并没有在应用配置中提供这个变量,或者该生成器版本和你的JHipster版本不兼容。JHipster的配置变量在不同版本间会有调整,而generator-jhipster-multitenancy的模板大概率是针对更高版本的JHipster编写的,导致渲染模板时找不到这个关键变量。

可行解决方案

1. 匹配生成器与JHipster的兼容版本

首先你需要确认generator-jhipster-multitenancy是否支持JHipster v4.13.1:

  • 查看该生成器的项目文档或package.json文件,找到它声明的兼容JHipster版本范围
  • 如果它只支持更高版本的JHipster,你有两个选择:
    • 升级你的主JHipster应用到兼容版本(注意:升级前务必备份代码,同时参考JHipster官方迁移指南处理版本差异)
    • 安装对应兼容旧版本的多租户生成器,比如执行:
      npm install generator-jhipster-multitenancy@x.x.x
      
      把x.x.x替换为支持JHipster v4.13.1的具体版本号。

2. 手动修改模板中的变量引用

如果你不想升级版本,可以直接修改报错的模板文件:

  • 找到路径:/home/joag/Proyectos/Munkys/prueba2/node_modules/generator-jhipster-multitenancy/generators/app/templates/src/main/java/package/domain/_User.java
  • 把第26行附近的<% if (hibernateCache !== 'no' && databaseType === 'sql') { %>替换为JHipster v4.13.1中对应的缓存变量。在JHipster v4.x版本里,缓存配置用的是cacheProvider,所以改成:
    <% if (cacheProvider !== 'no' && databaseType === 'sql') { %>
    
  • 保存修改后,重新运行yo jhipster-multitenancy即可。

3. 手动注入缺失的变量到生成器

另一种方法是修改多租户生成器的主逻辑,手动添加hibernateCache变量:

  • 打开生成器的主文件:/home/joag/Proyectos/Munkys/prueba2/node_modules/generator-jhipster-multitenancy/generators/app/index.js
  • 在模板渲染相关的代码前,添加如下内容:
    // 从应用配置中读取缓存设置,或者默认设为'no'
    this.hibernateCache = this.config.get('cacheProvider') || 'no';
    
  • 保存后重新运行生成器即可。

注意事项

  • 直接修改node_modules里的文件是临时方案,如果你重新执行npm install,所有修改都会丢失。建议如果采用这种方式,使用patch-package工具来持久化你的修改,或者把生成器fork到自己的仓库维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:56:45