JHipster生成项目中H2数据库表在IntelliJ中不显示的问题
我来帮你排查这个常见的H2连接问题,JHipster生成的项目里经常会遇到这种情况,主要有这几个可能的原因和解决办法:
检查数据库路径的基准目录是否一致
JHipster默认的H2文件路径jdbc:h2:file:./target/h2db/db/ikdoemee是相对路径,这个路径的基准目录是应用运行时的工作目录(通常是你的项目根目录),但IntelliJ的数据库工具可能用的是不同的基准目录(比如你打开的是子模块目录)。解决办法是改用绝对路径,比如:jdbc:h2:file:/Users/yourname/projects/ikdoemee/target/h2db/db/ikdoemee这样就能确保IntelliJ和H2控制台访问的是同一个数据库文件。
确保H2驱动版本完全匹配
IntelliJ自带的H2驱动版本可能和你项目pom.xml(或build.gradle)里依赖的H2版本不一致,版本不兼容会导致无法识别已存在的表。你可以:- 查看项目依赖里的H2版本(比如
2.2.220) - 在IntelliJ的数据库连接设置中,点击「Driver」选项卡,手动指定驱动为项目
target/lib目录下的H2 jar包,或者更新IntelliJ的H2驱动到对应版本。
- 查看项目依赖里的H2版本(比如
确认Schema和权限设置
JHipster生成的表默认在PUBLICschema下,有时候IntelliJ的数据库连接可能没有自动加载这个schema。你可以:- 在JDBC URL后添加
;SCHEMA=PUBLIC参数,比如:jdbc:h2:file:./target/h2db/db/ikdoemee;SCHEMA=PUBLIC - 或者在IntelliJ数据库连接的「Schemas」选项中,勾选
PUBLICschema。
- 在JDBC URL后添加
检查数据库表是否被保留
如果你的JHipster项目用的是Hibernate的ddl-auto=create-drop配置(开发环境默认可能是这个),那么当应用停止运行时,所有表会被自动删除。解决办法:- 确保应用处于运行状态时再连接IntelliJ查看表
- 或者修改
application-dev.yml(或application-dev.properties)里的spring.jpa.hibernate.ddl-auto为update或create,这样表会永久保存在H2文件中。
手动刷新IntelliJ数据库视图
有时候连接成功后,IntelliJ的数据库视图不会自动刷新,你可以点击数据库面板上的「刷新」按钮(圆形箭头图标),或者执行SQL命令SHOW TABLES;来验证表是否存在——如果命令能返回表,但视图看不到,就是刷新的问题。
内容的提问来源于stack exchange,提问作者Wouter

