复制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
相关产品推荐
相关产品推荐

