jpa @Column(updatable = false)不生效

异常现象:保存数据时createTime 字段一直被更新为当前时间

排查方法:

打开配置文件,增加显示sql语句

jpa:
   show-sql: true
Hibernate: update BX_SCORE set UPDATEBY=?, UPDATETIME=?, DEPTTYPE=?, POSTTYPE=?, SCORE=?, SUBDEPTTYPE=?, USERNAME=?, USERUUID=? where UUID=?  看到sql恍然大悟

在保证你代码配置等正确规范下,勿纠结,直接去看数据库表 字段设置

数据库

1、mysql 数据库

将默认去掉、根据当前时间戳更新去掉

2、Oracle数据库

默认的sysdate去掉

即可解决jpa @Column(updatable = false)不生效的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据实体类生成建表语句可以使用 JPA 自带的 `SchemaExport` 工具类。 示例代码如下: ``` import javax.persistence.Persistence; import org.hibernate.tool.hbm2ddl.SchemaExport; public class GenerateTableDDL { public static void main(String[] args) { // 指定持久化单元名称 String persistenceUnitName = "persistence-unit-name"; // 获取 EntityManagerFactory EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName); // 实例化 SchemaExport SchemaExport schemaExport = new SchemaExport(); // 设置输出格式 schemaExport.setFormat(true); // 设置输出文件路径 schemaExport.setOutputFile("ddl.sql"); // 获取 Configuration Configuration configuration = new Configuration().configure(persistenceUnitName, null); // 获取 MetadataSources MetadataSources metadataSources = new MetadataSources(new StandardServiceRegistryBuilder().build()); // 添加实体类 metadataSources.addAnnotatedClass(BusQueryList.class); // 获取 Metadata Metadata metadata = metadataSources.buildMetadata(); // 设置 Metadata schemaExport.create(EnumSet.of(TargetType.SCRIPT), metadata); // 关闭 EntityManagerFactory entityManagerFactory.close(); } } ``` 其中,`persistence-unit-name` 是持久化单元的名称,需要根据实际情况进行修改。`ddl.sql` 是输出的建表语句文件名,可以根据需要修改。`BusQueryList` 是实体类名,需要根据实际情况进行修改。 执行该程序后,会在指定的输出文件路径下生成建表语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值