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

复制JHipster项目到本地执行gradle bootRun遇ORA-01843错误

解决JHipster项目Liquibase迁移时ORA-01843无效月份错误

嘿,我来帮你搞定这个Liquibase迁移的问题!你遇到的ORA-01843: not a valid month是典型的日期格式不兼容问题——Oracle数据库没法解析Liquibase变更集里的日期字符串,导致20180223200132_added_entity_TipoMoneda.xml里的插入语句执行失败。咱们一步步来解决:

第一步:定位问题根源

打开你的变更集文件config/liquibase/changelog/20180223200132_added_entity_TipoMoneda.xml,找到触发错误的INSERT语句,查看里面的日期字段值。比如你可能会看到类似这样的内容:

<insert tableName="T_M_TIPOMONEDA">
    <column name="CREATION_DATE" value="2018-02-23"/>
    <!-- 其他字段 -->
</insert>

这里的2018-02-23格式和Oracle当前的NLS_DATE_FORMAT设置不匹配(比如Oracle默认可能用DD-MON-RR格式),所以数据库无法识别这个日期。

第二步:选择合适的解决方案

方案一:在变更集里显式转换日期(推荐)

直接在Liquibase的插入语句里用Oracle的TO_DATE函数指定日期格式,这样不管数据库的NLS设置是什么,都能正确解析。修改后的变更集代码类似:

<insert tableName="T_M_TIPOMONEDA">
    <column name="CREATION_DATE" valueComputed="TO_DATE('2018-02-23', 'YYYY-MM-DD')"/>
    <!-- 其他字段 -->
</insert>

注意把value改成valueComputed,这样Liquibase会直接执行这个函数表达式,而不是把它当成字符串值插入。

方案二:调整数据库的日期格式配置

如果你不想修改变更集,可以调整Oracle数据库的日期格式,让它匹配变更集里的日期格式。你可以:

  • 在项目的数据源配置文件(比如application-dev.yml)里,给JDBC URL添加日期格式参数:
    spring:
      datasource:
        url: jdbc:oracle:thin:@//your-db-host:1521/SISFACTDEV?nls_date_format=YYYY-MM-DD
        # 其他数据源配置
    
  • 或者在Liquibase变更集开头添加一个sql标签,执行ALTER SESSION命令修改会话的日期格式:
    <changeSet id="20180223200132-0" author="jhipster">
        <sql>ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'</sql>
    </changeSet>
    
    把这个变更集放在出错的那个变更集之前执行。

第三步:验证修复效果

修改完成后,重新执行gradle bootRun,看看Liquibase迁移是否能顺利完成。如果还有其他变更集出现类似错误,按照同样的方法处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:53